2016-11-26 41 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

相关问题