0

私の問題:クライアントが 経由でサーバーに接続しようとすると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場合、メソッドは呼び出されません。

なぜこれが起こるのか誰か知っていますか?

4

1 に答える 1

0

接続するために無効なIPとポートを指定しているか、非同期受信の実装が何かを永遠に繰り返しているだけです。

于 2012-08-10T00:13:37.027 に答える