如何确定客户端套接字的连接状态?
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
}
我正在使用 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
}