JavaSE——TCP協議網路編程(一)

来源:http://www.cnblogs.com/linlin0/archive/2016/12/18/6194678.html
-Advertisement-
Play Games

實現客戶端與服務端的連接: 使用ServerSocket創建TCP服務端 ServerSocket :此類實現伺服器套接字。伺服器套接字請求通過網路傳入,基於該請求執行某些操作,然後可能向請求者返回結果。 詳細描述見:http://download.java.net/jdk/jdk-api-loca ...


實現客戶端與服務端的連接: 

  • 使用ServerSocket創建TCP服務端

  ServerSocket :此類實現伺服器套接字。伺服器套接字請求通過網路傳入,基於該請求執行某些操作,然後可能向請求者返回結果。

  詳細描述見:http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/html/zh_CN/api/index.html

  ServerSocket 類的構造方法:

ServerSocket()
          創建非綁定伺服器套接字。
ServerSocket(int port)
          創建綁定到特定埠的伺服器套接字。
ServerSocket(int port, int backlog)
          利用指定的 backlog 創建伺服器套接字並將其綁定到指定的本地埠號。
ServerSocket(int port, int backlog, InetAddress bindAddr)
          使用指定的埠、偵聽 backlog 和要綁定到的本地 IP 地址創建伺服器。

  ServerSocket 類的常用方法

 Socket accept()
          偵聽並接受到此套接字的連接。
 void bind(SocketAddress endpoint, int backlog)
          將 ServerSocket 綁定到特定地址(IP 地址和埠號)。
 void close()
          關閉此套接字。
 InetAddress getInetAddress()
          返回此伺服器套接字的本地地址。
 boolean isBound()
          返回 ServerSocket 的綁定狀態。
 boolean isClosed()
          返回 ServerSocket 的關閉狀態。

簡要代碼:

ServerSocket server = new ServerSocket( 有效埠號 );

Server client = server.accept(); // 在沒有接收到客戶端連接請求時, accept 屬於堵塞狀態,接收到後繼續                                                        //運行。

if(client!=null){

  System.out.println("有客戶端連接上來了");

}

 

  • 使用Socket創建TCP客戶端

  Socket 類:此類實現客戶端套接字(“套接字”).套接字是兩台機器間通信的端點。

  常用的構造方法:

  Socket()
          通過系統預設類型的 SocketImpl 創建未連接套接字
  Socket(InetAddress address, int port)
          創建一個流套接字並將其連接到指定 IP 地址的指定埠號。
  Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
          創建一個套接字並將其連接到指定遠程地址上的指定遠程埠。
protected Socket(SocketImpl impl)
          使用用戶指定的 SocketImpl 創建一個未連接 Socket。
  Socket(String host, int port)
          創建一個流套接字並將其連接到指定主機上的指定埠號。
  Socket(String host, int port, InetAddress localAddr, int localPort)
          創建一個套接字並將其連接到指定遠程主機上的指定遠程埠。

 

常用的方法:

 void bind(SocketAddress bindpoint)
          將套接字綁定到本地地址。
 void close()
          關閉此套接字。
 void connect(SocketAddress endpoint)
          將此套接字連接到伺服器。

 簡要代碼:

Socket client = new Socket("127.0.0.0",9999);  服務端IP地址與埠號。

  查詢電腦的ip地址和埠號:

  打開命令提示符,輸入:
  ipconfig/all   (windows ip configuration 視窗操作系統ip配置)查看當前IP及電腦網路配置; 顯示當前電腦ip相關所有信息,包括ip地址、網卡(mac)地址。
  netstat -an ,查看當前所有連接埠; netstat(在內核中訪問網路及相關信息的程式)顯示網路連接、路由表和網路介面信息,可以讓用戶得知目前都有哪些網路連接正在運作。

package 網路編程;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server{
    public static void main(String[] args) {
        try {
            
            ServerSocket server = new ServerSocket(9657);
            Socket client = server.accept();
            if(client!=null){
                System.out.println("有客戶端連接上來了");
                server.close();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
package 網路編程;

import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {


    public static void main(String[] args) {
    
            
                try {
                    Socket client = new Socket("127.0.0.1",9657);
                    client.close();
                } catch (UnknownHostException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    }

}

output:有客戶端連接上來了。

此段服務端代碼存在問題,客戶端與服務端建立連接之後服務會自動關閉,不能繼續接受多個客戶端的請求。可以加上一個 while 迴圈,使服務端接受一個客戶端的請求後又回到 accept() 的接受狀態。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今日問題: 請問主程式輸出結果是什麼?(點擊以下“【Java每日一題】20161219”查看20161216問題解析) 題目原發佈於公眾號、簡書:【Java每日一題】20161219,【Java每日一題】20161219 註:weknow團隊近期開通並認證了分答,歡迎大家收聽,有問題也歡迎到分答來咨 ...
  • 1、tomcat的訪問日誌AccessLogs定期或者定量刪除 a 開啟tomcat訪問日誌 編輯${catalina}/conf/server.xml文件.註:${catalina}是tomcat的安裝目錄 把以下的註釋(<!-- -->)去掉即可。 <!--<ValveclassName="or ...
  • 1.app.js 2.m_p包下package.json 3.index.js 入口模塊 ...
  • 來博客園的第一天。 大學畢業三年多了,感覺自己碌碌無為,不知道自己究竟想做什麼,就這樣渾渾噩噩過了三年多。 記得大三那年,為了準備大四的畢業設計,自學了好幾個月的Java EE。Java基礎、Java Web、資料庫……然後各種度娘,東拼西湊,終於把畢業設計做出來了,當時感覺還挺有成就感的。 畢業那 ...
  • Python實現簡單的猜數字游戲,具體如下: 隨機生成一個1-10之間的數字,讓用戶來猜,當猜錯時,會提示猜的數字是大還是小了,直到用戶猜對為止。 ...
  • 1.Node.js 文件系統 2.非同步和同步 讀取文件內容的函數有非同步的 fs.readFile() 和同步的 fs.readFileSync()。 ...
  • R是免費開源的軟體,具有強大的數據處理和繪圖等功能。下麵是R開發環境的搭建過程。 一、點擊網址 https://www.r-project.org/ ,進入“The R Project for Statistical Computing”界面。 二、點擊加粗字體的“download R”,進行“CR ...
  • 1.事件驅動程式綁定事件及事件的處理程式 我們可以通過程式觸發事件 2.實例 3.讓類都具有事件的功能 app.js Test.js ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...