我正在使用 Modbus 协议通过以太网 TCP 连接在 PC 和 IO 模块之间进行通信。我正在使用 System.Net.Sockets.Socket 类来打开和发送/接收数据。起初一切都很好。一段时间后(5 到 10 小时),当程序调用 Socket.Connect 方法时,我收到以下 SocketException 错误代码 10060。我收到异常后尝试重新连接,但抛出了相同的异常。
连接尝试失败,因为连接的一方在一段时间后没有正确响应,或者连接失败,因为连接的主机没有响应
在正常执行期间(在抛出异常之前的 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;
}
}
}