套接字第一次断开连接

时间:2016-04-10 18:32:52

标签: c# asyncsocket

我使用Github上的库连接到服务器,因为我不熟悉C#中的套接字。建立连接的语法只是:

Connector con = new Connector(ip, port, cipher);
con.Connect();

cipher参数只是服务器使用的加密形式,与我的问题无关。我想。

在我调用Connect()方法之后,库会进行异步处理,我不确定之后会发生什么。我的问题是,当我构建我的应用程序并尝试连接到服务器时,我只会在第一次尝试时断开连接。然后,如果我再次尝试连接,程序工作正常。我能够在这里跟踪socket.BeginReceive的回调方法来解决问题的根源:

private void Receive() {
    if (m_connected) {
        var error = SocketError.Success;

        m_socket.BeginReceive(m_recvBuffer, 0, ReceiveSize, SocketFlags.None, out error, PacketCallback, null);

        if (error != SocketError.Success) {
            Disconnect();
        }
    }
}

private void PacketCallback(IAsyncResult iar) {
    if (m_connected) {
        var error = SocketError.Success;
        int length = m_socket.EndReceive(iar, out error);

        if (length == 0 || error != SocketError.Success) {
            Disconnect();
        }
        else {
            Append(length);
            ManipulateBuffer();
            Receive();
        }
    }
}

socket.EndReceive返回的长度为0,导致程序与SocketError.ConnectionReset断开连接。我似乎无法弄清楚为什么它只发生在我的第一次连接尝试上。每次后续连接尝试都可以。熟悉套接字的人可以告诉我它是否是库代码中的错误,并且修复了吗?如果没有,我只需假设它是服务器端的错误。感谢。

1 个答案:

答案 0 :(得分:-1)

不要使用套接字助手。 Socket非常容易在.net中使用。

看看这个msdn示例:https://msdn.microsoft.com/en-us/library/bew39x2a(v=vs.110).aspx

使用上述链接中的代码。希望它对你有用。