クライアントアプリケーションをサーバーアプリケーションに接続し、接続が失われた場合に継続的に再接続を試みたい。
現在、タイマーを使用して、最初にNetworkStream.Writeでパケットを送信し、次にTcpClient.Connectedをチェックすることで接続をチェックしようとしていますが、機能していないようです。クライアントが接続を失った後、TcpClient.Connectedがfalseに戻ることはありません。
これを行う最も簡単な方法は何でしょうか?
クライアントアプリケーションをサーバーアプリケーションに接続し、接続が失われた場合に継続的に再接続を試みたい。
現在、タイマーを使用して、最初にNetworkStream.Writeでパケットを送信し、次にTcpClient.Connectedをチェックすることで接続をチェックしようとしていますが、機能していないようです。クライアントが接続を失った後、TcpClient.Connectedがfalseに戻ることはありません。
これを行う最も簡単な方法は何でしょうか?
接続が閉じている場合は、例外をスローする必要があります。あなたはそれを捕まえて、接続を再開することができます。TcpListener
これは、 aTcpClient
が接続されている間にシャットダウンしたときに発生した例外です。
System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
編集: これは、接続を継続的に再試行する方法のサンプルです。状況によっては、永久に再試行しないように、カウンターまたはタイマーが必要になる場合があることに注意してください。
public class PersistantTcpClient
{
TcpClient Client { get; set }
public void Start()
{
while (true)
{
try
{
this.Client.Connect("host", port)
// once it can connect, get back to work!
DoWork();
}
catch (SocketException)
{
// if it cannot connect, keep trying
}
}
}
}