2013-04-11 5 views
0

SocketAsyncEventArgs를 사용하여 작은 소켓 서버 측을 빌드했습니다. 하지만 몇 가지 문제가 발생하면 클라이언트 소켓을 수락 한 다음 e.AcceptSocket.ReceiveAsync를 사용하여 클라이언트 측 정보를 수신하려고했지만 왜 이것이 항상 True인지는 알 수 없습니다. 여기에 서버 쪽 :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); 
    } 

내 클라이언트 측 만에 정보를 원하시면 "안녕하세요 서버"서버 측을 연결하고 전송하는 연결 방식을 사용합니다. 하지만 왜 내가 여기에 항상 "사실"을 가지고 있습니까?

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

xx.

답변

0

해 결했습니다. 버퍼 크기가 너무 큽니다. "Hello World"에는 12 개의 문자 만 포함됩니다. 그래서 12로 버퍼 크기를 설정해야합니다. readEventArgs.SetBuffer (new byte [12], 0, 12);