2013-04-11 82 views
0

我使用SocketAsyncEventArgs來構建一個小型的Socket服務器端。但遇到一些問題,當我接受客戶端套接字時,我嘗試使用e.AcceptSocket.ReceiveAsync接收客戶端信息,但我不知道爲什麼它總是對我顯示爲真。 這裏是服務器端:爲什麼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); 
    } 

我的客戶端只使用連接的方法來連接服務器端和發送信息「Hello服務器」來了。但爲什麼我在這裏總是得到「真實」?

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

thx。

回答

0

已經解決了這個問題。 ,因爲緩衝區大小設置得太大。 「Hello World」只包含12個字符。 所以我應該設置緩衝區大小爲12. readEventArgs.SetBuffer(new byte [12],0,12);