我的问题:当客户端尝试通过 连接到服务器时Socket.BeginReceive
,服务器没有响应。我试过合并一个try/catch
块,但事实证明这没用。即使在 VS 调试器中,它也没有给我错误日志,而是进入 Windows 7“程序无响应”屏幕。
它不会一直发生......只有在大约 5 或 6 次成功连接和断开连接之后。
这是相关代码(服务器端,因为崩溃发生在服务器端):
public Remote(Socket s)
{
tempbuffer = new byte[300];
buffer = new byte[0];
connectionSocket = s;
ip = connectionSocket.RemoteEndPoint.ToString().Split(':')[0];
Log(ip + " connecting...");
connectionSocket.BeginReceive(
tempbuffer, 0, tempbuffer.Length, SocketFlags.None,
new AsyncCallback(Receive), this);
}
接收方式:
static void Receive(IAsyncResult result)
{
Remote r = (Remote)result.AsyncState;
if (r.disconnected) return;
try
{
int length = r.connectionSocket.EndReceive(result);
if (length == 0) { r.Disconnect(); return; }
byte[] b = new byte[r.buffer.Length + length];
Buffer.BlockCopy(r.buffer, 0, b, 0, r.buffer.Length);
Buffer.BlockCopy(r.tempbuffer, 0, b, r.buffer.Length, length);
r.buffer = r.HandleMessage(b);
r.connectionSocket.BeginReceive(
r.tempbuffer, 0, r.tempbuffer.Length, SocketFlags.None,
new AsyncCallback(Receive), r);
}
catch (SocketException) { r.Disconnect("Error!"); }
catch (Exception e) { ErrorLog(e); r.Disconnect("Error!"); }
}
我看到了该ip connecting
消息,但之后它没有响应。Receive
执行此操作时永远不会调用该方法。
有谁知道为什么会这样?