套接字是否连接到SeverSocket(0)而没有端口转发?

时间:2014-12-10 02:09:10

标签: java sockets port server

我正在尝试在java中创建一个简单的消息传递程序,只要你连接到互联网就可以工作。为此,我需要创建一个ServerSocket来接收消息。但是为了制作ServerSocket,我需要将它分配给一个端口。如果我为它分配一个特定的端口,如25504,客户端如何连接到该服务器而不必转发该端口?如果我使用ServerSocket(0)找到一个空闲端口,如果没有服务器向客户端发送端口,客户端如何知道它找到了什么端口?我希望这个程序能够在不必向前移动的情况下使用,因此您可以在公共场所使用它。

1 个答案:

答案 0 :(得分:2)

您不需要服务器套接字来接收消息。客户端套接字可以连接到服务器,然后轻松地接收消息。将客户端连接到服务器不需要在客户端进行任何端口转发。

但是,如果您使用服务器套接字,并且您在网络路由器后面运行,则必须配置端口转发,这是无法避免的。但是,许多路由器都支持uPNP,其中(尤其)可以允许应用程序动态打开/关闭路由器上的转发端口。

如果将服务器套接字绑定到端口0以选择随机短暂端口,则必须将该端口发布到客户端可以找到它的位置,无论是在远程站点上,还是通过网络子网查询等发现。