代码之家  ›  专栏  ›  技术社区  ›  Anteru

选择用于监听响应/保持套接字打开的端口?

  •  1
  • Anteru  · 技术社区  · 15 年前

    我有一个客户端应用程序,它必须连接到服务器并注册等待,也就是说,当服务器完成一些处理后,它需要得到通知。理想情况下,我希望尽可能简化这个客户机,但问题是,如何“注册等待”。我可以保持套接字打开并进行阻塞读取,一旦服务器完成,它就会向客户机发送一些数据,我就完成了;不幸的是,这会在相当长的一段时间内阻塞服务器上的一个端口。

    有哪些选择?我可以在客户机端选择一个随机端口,并在那里监听连接,但这需要我选择一个自由随机端口——我不知道如何在C中做到最好?我考虑检查发送到服务器时使用的本地端口,然后重新使用它;我想知道是否有一些推荐的方法来解决这个问题。来自客户端的轮询是毫无疑问的,因为完成和通知之间的时间不应该太长。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Mehrdad Afshari    15 年前

    通过 0 作为到的端口号 IPEndPoint 构造函数:

    Socket.Bind 关于msdn的备注:

    如果不关心使用的是哪个本地端口,则可以创建一个 IPendpoint公司 使用0作为端口号。在这种情况下,服务提供者将分配一个介于1024和5000之间的可用端口号。

    如果使用上述方法,您可以通过调用 LocalEndPoint . 如果您使用的是面向连接的协议, 局部端点 在您呼叫后才会返回本地分配的网络地址 Connect EndConnect 方法。如果您使用的是无连接协议,在完成发送或接收之前,您将无法访问此信息。