为什么ServerSocket使用不同的端口提供Socket?

时间:2016-11-26 02:24:46

标签: java sockets tcp

服务器:

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

引用:

docs

  

.. ServerSocket.accept()接受连接,并将端点包装在中   一个插座。端点具有与之相同的本地端口号   ServerSocket,根据RFC 793的定义,因此也是如此   包裹套接字。

  

..每个客户端连接将获得一个单独的Socket进行通信,   所有通信使用相同的服务器端TCP端口。

1 个答案:

答案 0 :(得分:3)

getPort()返回套接字的远程端口(即其他端地址),而getLocalPort()返回套接字绑定的本地端口。

如果您在服务器接受的套接字上运行s.getLocalPort());,那么您也会获得7000