Java 文档说,ServerSocket
监听x
端口的 , 会从它的方法5555
返回一个新的Socket
, ,这样:y
accept()
的本地端口
y
设置为5555
;和x
继续在端口上侦听5555
新accept()
连接。
我已经验证了上述情况确实如此。
然而,这个关于港口的维基百科条目有这样的说法:
此过程称为侦听,涉及在知名端口上接收请求并在另一个私有端口上重新建立一对一的服务器-客户端通信,以便其他客户端也可以联系知名服务端口。
对我来说,上面的维基百科摘录往往更有意义......因为根据我对 TCP/IP 的阅读和理解,
目标 IP 地址有助于将数据包传递到正确的主机;和
目标端口有助于将数据包传递到目标主机上的正确进程
因此,鉴于accept()
Java 中的文档和行为,我想知道如果多线程客户端尝试与多线程服务器通信(通过打开两个通信通道,每个线程中一个),如何实现数据包传递?在这种情况下,当所有数据包都设置了相同的目标 IP 地址和端口值时,Java(或底层 TCP/IP 堆栈)如何知道哪个数据包属于哪个通道?
编辑:请参阅 EJP 的回复以及 Nikolai 在下面的评论。据他们说,上述维基百科的说法是错误的。EJP 继续并修复了维基百科条目。