Почему 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);

Другие вопросы по тегам