ServerSocket是否为每个连接创建一个新套接字?

时间:2016-12-11 22:19:46

标签: java sockets networking serversocket

我在Socket tutorial中阅读了以下声明。

  

如果一切顺利,服务器会接受连接。的一旦   接受,服务器获取绑定到同一本地端口的新套接字   并且还将其远程端点设置为的地址和端口   客户。 它需要一个新的套接字,以便它可以继续收听   连接请求的原始套接字,同时满足需要   连接的客户端。

以下是我的问题:

  1. 请从上面纠正我的理解 - 我通过指定端口打开套接字(ServerSocket),比方说8001,现在我的服务器将开始侦听此端口上的请求,现在它从客户端获取请求,类似于http://abc:8001/test,所以一旦接受连接,它就会创建一个本地端口,比如说10001,所以现在这个客户端请求将被接受超过10001(或者换句话说,客户端的连接将通过端口10001建立)而8001将再次免费并收听新请求?
  2. 那么,这是否意味着我用ServerSocket指定的原始端口永远不会用于建立连接?
  3. 那么,这是否意味着如果我与客户端建立连接,请说通过端口9001,那么在原始请求之前,在同一个9001端口上永远不会再发生一次通信(或者换言之,建立连接)我餐饮完毕了吗?
  4. 请随时详细了解这些问题的概念,这不仅有助于我,也有助于未来的访客。

1 个答案:

答案 0 :(得分:2)

  

ServerSocket是否为每个连接创建一个新套接字?

  

我通过指定端口打开一个套接字(ServerSocket),比方说8001,现在我的服务器将开始侦听此端口上的请求,现在它收到来自客户端的请求,如http://abc:8001/test,所以一次它接受它将创建本地端口的连接让我们说10001,

没有

  

所以现在这个客户请求将在10001以上受理

没有

(或者换句话说,与客户端的连接将通过端口10001建立)

没有

  

而8001将再次免费并收听新请求吗?

  

那么,这是否意味着我用ServerSocket指定的原始端口永远不会用于建立连接?

没有

  

那么,这是否意味着如果我与客户端建立连接,请说通过端口9001,那么在原始请求之前,在同一个9001端口上永远不会再发生一次通信(或者换言之,建立连接)我餐饮完成了吗?

没有

接受的套接字使用与listienng套接字相同的本地端口,与您引用的文本完全相同。

根据您的问题,您根据问题正文将新插槽与新端口混淆。