为什么e.AcceptSocket.ReceiveAsync总是如此

时间:2013-04-11 09:29:02

标签: socketasynceventargs

我使用SocketAsyncEventArgs构建一个小的Socket服务器端。但遇到一些问题,当我接受客户端套接字,然后我尝试使用e.AcceptSocket.ReceiveAsync来接收客户端信息,但我不知道为什么它始终显示为我。 这是服务器端:

    private void ProcessAccept(SocketAsyncEventArgs e)
    {
        Console.WriteLine("Process Accept!");
        if (e.BytesTransferred > 0)
        {
            Console.WriteLine("client online...");
        }

        SocketAsyncEventArgs readEventArgs = new SocketAsyncEventArgs();
        readEventArgs.AcceptSocket = e.AcceptSocket;
        readEventArgs.SetBuffer(new byte[1024], 0, 1024);
        readEventArgs.Completed+=readEventArgsIO_Completed;

        Boolean willRaiseEvent = e.AcceptSocket.ReceiveAsync(readEventArgs);
        if (!willRaiseEvent)
        {
            this.ProcessReceive(readEventArgs);
        }

          this.StartAccept(e);
    }

我的客户端只使用Connect方法连接服务器端并向其发送信息“Hello Server”。但为什么我在这里总是“真实”?

Boolean willRaiseEvent = e.AcceptSocket.ReceiveAsync(readEventArgs);

THX。

1 个答案:

答案 0 :(得分:0)

解决了这个问题。 因为缓冲区大小设置得太大。 “Hello World”仅包含12个字符。 所以我应该将缓冲区大小设置为12。 readEventArgs.SetBuffer(new byte [12],0,12);