我使用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断开连接。我似乎无法弄清楚为什么它只发生在我的第一次连接尝试上。每次后续连接尝试都可以。熟悉套接字的人可以告诉我它是否是库代码中的错误,并且修复了吗?如果没有,我只需假设它是服务器端的错误。感谢。
答案 0 :(得分:-1)
不要使用套接字助手。 Socket非常容易在.net中使用。
看看这个msdn示例:https://msdn.microsoft.com/en-us/library/bew39x2a(v=vs.110).aspx
使用上述链接中的代码。希望它对你有用。