我正在使用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;
}
}
}