我使用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。
答案 0 :(得分:0)
解决了这个问题。 因为缓冲区大小设置得太大。 “Hello World”仅包含12个字符。 所以我应该将缓冲区大小设置为12。 readEventArgs.SetBuffer(new byte [12],0,12);