因为我不熟悉C#中的套接字,所以我在Github上使用库来连接服务器。用于建立连接的语法就是:第一次断开套接字
Connector con = new Connector(ip, port, cipher);
con.Connect();
的加密参数仅仅是形式的加密服务器使用,是不相关的我的问题,我想。
在我调用Connect()方法之后,库会产生一个异步socked,我不太确定之后会发生什么。我的问题是,当我构建我的应用程序并尝试连接到服务器时,我经常在第一次尝试时断开连接。然后,如果我尝试再次连接该程序正常工作。我能够追查问题的源头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断开。我似乎无法弄清楚为什么它只发生在我的第一次连接尝试。每个后续连接尝试都能正常工作熟悉套接字的人可以告诉我它是否是库代码中的错误,并且可以修复?如果不是,我只需要假定它在服务器端是错误的。谢谢。
你连接了什么服务器?你是如何确保服务器不断开的? – usr
@usr这正是我想知道的。我无法知道服务器是否断开我的连接。这就是为什么如果我知道图书馆没有任何问题,我可以得出结论,这个问题已经超出了我的控制范围。 – Andrew
好吧,编写你自己的socket程序来做到这一点。使用同步IO。如果你不需要完全正确而只是一个测试,那么做到这一点非常简单。 – usr