2016-04-10 30 views
1

因为我不熟悉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断开。我似乎无法弄清楚为什么它只发生在我的第一次连接尝试。每个后续连接尝试都能正常工作熟悉套接字的人可以告诉我它是否是库代码中的错误,并且可以修复?如果不是,我只需要假定它在服务器端是错误的。谢谢。


+0

你连接了什么服务器?你是如何确保服务器不断开的? – usr

+0

@usr这正是我想知道的。我无法知道服务器是否断开我的连接。这就是为什么如果我知道图书馆没有任何问题,我可以得出结论,这个问题已经超出了我的控制范围。 – Andrew

+0

好吧,编写你自己的socket程序来做到这一点。使用同步IO。如果你不需要完全正确而只是一个测试,那么做到这一点非常简单。 – usr

回答

-1

请勿使用套接字助手。套接字在.net中使用非常简单。

在此MSDN例子看看:https://msdn.microsoft.com/en-us/library/bew39x2a(v=vs.110).aspx

使用的代码在上面的链接。希望它能为你工作。

+0

???套接字超级难以使用。有无数可能的错误,我每天都看到屠杀。这个答案告诉我,你从来没有写过一个正确的套接字应用程序。另外,这不是一个答案。 – usr

+0

立即查看此MSDN示例。这是最可怕的MSDN样本之一。这段代码是令人憎恶的。 – usr

+0

我不这么认为.net上的套接字是超级困难的。有很多帮助scokets的帮助。超硬是你无法找到它的帮助:) – Saif