因爲我不熟悉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