【问题标题】:Is it possible to find the listening port of a remote client connecting to my server?是否可以找到连接到我的服务器的远程客户端的侦听端口?
【发布时间】:2019-01-15 16:20:41
【问题描述】:

一旦建立传入的 TCP 连接,通过java.net.Socket,我可以找到我的侦听端口和为此连接创建的端口。有没有办法;当连接到我的客户端也是监听连接的服务器时;知道这个远程客户端/服务器正在监听哪个端口?

感觉就像是错误地使用了套接字。在我的例子中,它是识别构成我们应用程序的客户端/服务器实体。所以我可以在建立传出连接时发送某种问候消息以进行识别。
但我很好奇这是否可能,我没有找到答案。有什么想法吗?

【问题讨论】:

    标签: java sockets tcp


    【解决方案1】:

    当客户端连接到您的服务器时,它会打开一个端口供您向客户端发送数据。此连接自动连接,以便从服务器写入套接字将发送到正确的客户端端口。如果您想知道Socket.getRemoteSocketAddress() 是什么,它将返回一个SocketAddress,可以将其转换为具有getPort() 方法的InetSocketAddress

    如果服务器打开了您希望使用的其他端口,则必须将该端口从客户端发送到服务器。

    例如,如果计算机 A 正在运行并且 SSH 服务器在 1234 端口上,并且它想通知计算机 B 以便计算机 B 可以 SSH 到计算机 A,而计算机 B 正在侦听 1337 端口,那么计算机 A 可以连接到计算机 B 上的 1337 端口,按照“我正在侦听 1234”的行发送一些内容,由 B 读取,然后 B 可以使用它通过 SSH 连接到 A。

    【讨论】:

    • java.net.Socket 有一个 getPort(),它返回此套接字连接到的远程端口号。无需调用 getRemoteSocketAddress() 并转换为 InetSocketAddress。
    • 感谢您的回答,我知道我可以这样做,但这不是我想要的。我想知道服务器是否可以通过初始套接字连接检索客户端的信息(在我的情况下是客户端的侦听端口)。
    猜你喜欢
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 2011-10-14
    • 2015-10-14
    相关资源
    最近更新 更多