选择一个端口来监听响应/保持套接字打开?

时间:2009-08-27 19:24:49

标签: .net sockets distributed

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

有哪些替代品?我可以在客户端选择一个随机端口,并在那里监听连接,但这需要我选择一个免费的随机端口 - 而且我不确定如何在C#中做到最好?我想在检查发送到服务器时使用的本地端口,并重新使用它;我想知道是否有一些推荐的解决方法。从客户那里进行轮询是不可能的,因为完成和通知之间的时间不应太长。

1 个答案:

答案 0 :(得分:1)

0作为端口号传递给IPEndPoint构造函数:

  

Socket.Bind关于MSDN的评论:

     

如果您不关心使用哪个本地端口,可以使用0为端口号创建IPEndPoint。在这种情况下,服务提供商将分配1024到5000之间的可用端口号。

     

如果您使用上述方法,则可以通过调用LocalEndPoint来发现已分配的本地网络地址和端口号。如果您使用面向连接的协议,LocalEndPoint将不会返回本地分配的网络地址,直到您调用ConnectEndConnect方法。如果您使用的是无连接协议,则在完成发送或接收之前,您将无法访问此信息。