繁体   English   中英

TCP:当服务器在随机端口上侦听时,客户端如何知道要发送到哪个端口?

[英]TCP: When server listening on random port how does client know which port to send to?

问题:在Java中,您可以使用ServerSocket(0)在服务器上创建一个套接字,它将选择一个随机端口进行监听。 但是,当您在客户端上创建套接字以使用Socket(addr,port)发送消息时,没有明显的方法来确定您需要将服务器发送到哪个端口。 除了基本的“如果您输入0,它将选择一个随机端口”,我无法通过网络搜索找到有关此选项的任何信息。 是否有人知道或有资源可以从客户端解释这种情况?

一些背景:我目前正在将系统从UDP转换为TCP。 我需要服务器在随机端口上进行监听的原因是我的服务器/客户端没有严格的服务器/客户端关系。 因此,这种情况下的“服务器”实际上是我需要在一台PC上打开多个实例的应用程序。 具有预定发送/接收端口的旧方法是仅使一个实例能够打开端口,并且所有通信都将重定向到该实例。 我的理解是,解决此问题的最佳方法是让每个实例使用不同的端口,而最好的方法是执行ServerSocket(0)。 尽管包括此背景知识,但我不想评论这种情况的混乱程度,而只想回答与该问题有关的答案。

也许,如果您与所有服务器/客户端位于同一IP子网中,则可以使用UPnP发出信号,指示正在运行应用程序的新实例的哪个随机端口,并且类似地,其他实例可以监视UPnP以发现此新实例。 我从来没有用Java实现UPnP,但是怀疑库在那里。 https://github.com/jupnp/jupnp

如果固定端口号不是服务器记录的设置/协议的一部分,则客户端要弄清的唯一方法是让正在运行的/活动的服务器在某些数据存储中发布该信息,并记录和知道其位置和详细信息客户端,以及客户端可以访问该数据存储的位置。

[或者让客户端在每次想要连接时都运行一个端口。 它可以工作,但可能不如您的用户所希望的快。]

您的情况确实搞砸了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM