Question

I used SocketAsyncEventArgs to build a tiny Socket Server side. but encountering some problems, when I accepted the client socket, then I tried to use e.AcceptSocket.ReceiveAsync to receive client side info, but I don't know why it always show True to me. here is the server side:

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

my client side only use the Connect method to connect the server side and send info "Hello Server" to it. but why I am here always got "True"?

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

thx.

Was it helpful?

Solution

Have solved this. because the buffer size is set too large. "Hello World" only contains 12 chars. so I should set the Buffer size as 12. readEventArgs.SetBuffer(new byte[12], 0, 12);

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top