JavaSE——TCP協議網路編程(一),javase網路編程
實現用戶端與服務端的串連:
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 類:此類實現用戶端通訊端(“通訊端”).通訊端是兩台機器間通訊的端點。
常用的構造方法:
|
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() 的接受狀態。