2016-11-26 103 views
-1

服務器:爲什麼ServerSocket使用不同的端口提供Socket?

int port = 7000 
ServerSocket ss; 
.. 
System.out.println("Listening on " + ss.getInetAddress() + ":" 
    + ss.getLocalPort()); 

Socket s = ss.accept(); 
.. 
System.out.println("Accepted connection " + s.getInetAddress() + ":" 
    + s.getPort()); 

客戶:

Socket s; 
.. 
System.out.println("Connected to " + s.getInetAddress() + ":" 
    + s.getPort()); 

服務器開始監聽:

Listening on 0.0.0.0/0.0.0.0:7000

客戶端連接:

Connected to localhost/127.0.0.1:7000

但服務器說,套接字連接在不同的端口上?

Accepted connection /127.0.0.1:54682

引用:

Java the difference of Socket and ServerSocket in using port

..的ServerSocket.accept()接受一個連接,幷包裝在 一個Socket端點。根據RFC 793定義,端點具有與 ServerSocket相同的本地端口號,因此 也包裝Socket。

..每個客戶端連接將得到一個單獨的插座上進行通信, 所有通信使用相同的服務器側的TCP端口。

回答

3

getPort()返回套接字的遠程端口(即對方地址),而getLocalPort()返回套接字綁定到本地端口。

如果您在服務器接受的套接字上運行s.getLocalPort());,您也會得到7000

+0

確認:接收端的getPort()是客戶端的傳出臨時端口? – Zhro

+1

@Zhro:我寧願說在服務器端。通常,'getPort()'總是返回遠程端口,即客戶端的服務器和服務器偵聽端口的客戶端計算機端口。 –

+0

@Zhro我寧願說它會返回遠程端口,根本不考慮客戶端和服務器。連接完成後,只有本地端和對等端。 – EJP

相關問題