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