【发布时间】:2018-08-02 20:19:50
【问题描述】:
问题:在java中你可以用ServerSocket(0)在服务器上创建一个socket,它会随机选择一个端口来监听。但是,当您在客户端上创建一个套接字以使用 Socket(addr, port) 发送消息时,没有明显的方法可以确定您需要发送到服务器上的哪个端口。除了基本的“如果您输入 0 它将选择一个随机端口”之外,我无法通过网络搜索找到有关此选项的任何信息。有谁知道或有资源可以从客户端解释这个场景应该是什么样子?
一些背景知识:我目前正在将系统从 UDP 转换为 TCP。我需要服务器监听随机端口的原因是我的服务器/客户端没有严格的服务器/客户端关系。因此,这种情况下的“服务器”实际上是一个应用程序,我需要在一台 PC 上打开多个实例。具有预定发送/接收端口的旧方法是导致只有一个实例能够打开一个端口,并且所有通信都被重定向到该实例。我的理解是解决这个问题的最好方法是让每个实例使用不同的端口,而最好的方法是使用 ServerSocket(0)。尽管包括了这个背景,但我不想让 cmets 知道情况有多混乱,只需要与问题相关的答案。
【问题讨论】:
-
如果“客户端”和“服务器”在同一个网络上,您可以让“服务器”广播它们当前的 IP 和端口。 “客户端”可以接收这些广播并决定连接到哪个“服务器”。或者,在与“服务器”相同的 PC 上设置另一个侦听器并使其知道“服务器”当前端口,然后为其提供自己的固定侦听端口,供客户端连接并查询哪些“服务器”可用。
标签: java sockets tcp serversocket