连接到IO模块时出现套接字错误10060

时间:2012-05-18 21:25:48

标签: c# .net sockets tcp socketexception

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

0 个答案:

没有答案