如何确定客户端套接字的连接状态?

How to determine the connection state of a client socket?

我正在使用 NetMQ 套接字执行客户端-服务器通信。我有一个监听端口 5555 的服务器和一个客户端,.bind()-s 到它。

这是我的代码示例:

using (NetMQContext ctx = NetMQContext.Create())
{
     using (var client = ctx.CreateRequestSocket())
     {                            
           client.Connect("tcp://127.0.0.1:5555");                            
           client.SendFrame(jData);                            
     }
}

我想做的是在客户端找不到任何服务器侦听该端口时与用户通信。

实际发生的情况是,如果没有服务器侦听该端口,则不会引发异常,并且会调用 .sendFrame() 并且应用程序会崩溃。

是否有任何方法,例如异常或状态代码,可以通知我连接是否成功?

最好的方法是响应超时。 所以发送一个请求(带超时),然后等待带超时的响应。如果服务器在超时时间内没有响应,你可以去尝试连接到下一个服务器。像这样:

if (client.TrySendFrame(TimeSpan.FromSeconds(2), jData) && 
    client.TryReceiveFrame(TimeSpan.FromSeconds(2), out jData) ) 
{
    // Server is online
}
else 
{
    // Server is down
}