0

クライアント - サーバー通信を実行するために 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()が呼び出されてアプリケーションがクラッシュするということです。

例外や状態コードなど、接続が成功したかどうかを通知できる方法はありますか?

4

1 に答える 1

1

これを行う最善の方法は、応答のタイムアウトを使用することです。そのため、(タイムアウト付きで) リクエストを送信してから、タイムアウト付きで応答を待ちます。サーバーがタイムアウト内に応答しなかった場合は、次のサーバーへの接続を試みることができます。そのようです:

if (client.TrySendFrame(TimeSpan.FromSeconds(2), jData) && 
    client.TryReceiveFrame(TimeSpan.FromSeconds(2), out jData) ) 
{
    // Server is online
}
else 
{
    // Server is down
}
于 2016-09-20T07:36:25.290 に答える