0

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

    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);

谢谢。

4

1 回答 1

0

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

于 2013-04-11T09:39:08.890 回答