服务器没有响应'Socket.BeginReceive'

时间:2012-08-10 00:06:12

标签: c# sockets

我的问题:当客户端尝试通过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方法永远不会被调用。

有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:0)

你要给它一个无效的IP和连接端口,或者异步接收的实现只是永远重复一些。