【问题标题】:Have socket connect to SeverSocket(0) without port forwarding?有没有端口转发的套接字连接到 SeverSocket(0)?
【发布时间】:2015-02-08 03:07:42
【问题描述】:

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

【问题讨论】:

    标签: java sockets port server


    【解决方案1】:

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

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

    如果您将服务器套接字绑定到端口 0 以选择一个随机的临时端口,那么您必须将该端口发布到客户端可以找到它的某个地方,无论是在远程站点上,还是通过网络子网查询等可发现。

    【讨论】:

    • 如何设置客户端套接字来接收数据?
    • 您只需将客户端套接字连接到服务器,然后在循环、计时器或线程中开始从客户端套接字读取。就是这么简单。正常操作是读取阻塞调用线程,直到数据到达。或者你可以在阅读前定期检查socket的InputStream.available()方法,以防在此期间需要做其他事情。
    猜你喜欢
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 2016-07-07
    • 2011-07-23
    相关资源
    最近更新 更多