Почему e.AcceptSocket.ReceiveAsync всегда будет верным
Я использовал SocketAsyncEventArgs для создания крошечной стороны Socket Server. но, столкнувшись с некоторыми проблемами, когда я принял сокет клиента, я попытался использовать 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". но почему я здесь всегда получил "True"?
Boolean willRaiseEvent = e.AcceptSocket.ReceiveAsync(readEventArgs);
Спасибо.
1 ответ
Решение
Решили это. потому что размер буфера слишком велик. "Hello World" содержит только 12 символов. поэтому я должен установить размер буфера равным 12. readEventArgs.SetBuffer(новый байт [12], 0, 12);