Modbusプロトコルを使用してイーサネット経由でTCP接続を使用してPCモジュールとIOモジュール間で通信しています。データの送受信にSystem.Net.Sockets.Socketクラスを使用しています。最初はすべてが順調です。しばらくすると(5〜10時間)、プログラムがSocket.Connectメソッドを呼び出すと、エラーコード10060で次のSocketExceptionが発生します。例外が発生した後に再接続しようとしましたが、同じ例外がスローされました。
接続されたパーティが一定期間後に適切に応答しなかったために接続の試行が失敗したか、接続されたホストが応答しなかったために確立された接続が失敗しました
通常の実行中(例外がスローされるまでの5〜10時間)、古いソケットを閉じて新しいソケットを作成することにより、新しいtcp接続を作成します。これは何度も行われます。再接続するたびにtcp接続の数を確認しますが、同じままです。次のメソッドを使用して何度も接続します。ここで、SocketWrapperは、モジュールへの接続とデータの送受信に使用するクラスです。
この問題を調査するにはどうすればよいですか?
class SocketWrapper
{
IPAddress m_ipAddr;
Socket m_Socket;
int m_port;
public bool Connect(string i_szIPAddr, ProtocolType protocolType)
{
try
{
this.Disconnect();
this.m_ipAddr = IPAddress.Parse(i_szIPAddr);
this.m_port = 0x1f6;
IPEndPoint remoteEP = new IPEndPoint(this.m_ipAddr, this.m_port);
this.m_socket = new Socket(remoteEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
this.m_socket.Connect(remoteEP);
return true;
}
catch
{
return false;
}
}
public void Disconnect()
{
if (this.m_socket != null)
{
if(this.m_socket.Connected)
this.m_socket.Shutdown(SocketShutdown.Both);
this.m_socket.Close();
this.m_socket = null;
}
}
}