C# Socket 베이스(2) 서버에서 비동기적으로 메시지 수신

7791 단어 socket
 ManualResetEvent reviceManager = new ManualResetEvent(false);

 
 1 public void args_Completed(object sender, SocketAsyncEventArgs e)
 2  {
 3      // , 
 4      var clientSocket = e.AcceptSocket;
 5      
 6     if (clientSocket == null) return;
 7      // 
 8      // 
 9       var t = new Thread(GetClientMsg);
10      // 
11        t.IsBackground = true;
12       // 
13        t.Start(clientSocket);
14       // 
15       ShowMsg(clientSocket.RemoteEndPoint + " ");
16      //
17      manager.Set();
18  }

 
대조를 건의하다C# Socket 기반 (1) 비동기식 서비스 탐색 시작 보자.
 1    private void GetClientMsg(object socket)
 2    {
 3        var socketClient = socket as Socket;
 4        if (socketClient == null) return;
 5         while (true)
 6          {
 7            try
 8              {
 9                  reviceManager.Reset();
10                  var bytes = new byte[1024 * 1024 * 4];
11                  var receiveArgs = new SocketAsyncEventArgs();
            //
12 receiveArgs.SetBuffer(bytes, 0, bytes.Length); 13 receiveArgs.Completed += receiveArgs_Completed;
            //
14 socketClient.ReceiveAsync(receiveArgs); 15 reviceManager.WaitOne(); 16 } 17 catch (Exception ex) 18 { 19 20 // 21 ShowMsg(ex.Message);
22 }
     }

}

메시지 수신 완료 콜백 이벤트
1  void receiveArgs_Completed(object sender, SocketAsyncEventArgs e)
2   {
3      var socketClient = sender as Socket;
4      var bytes = e.Buffer;
5      ShowMsg(socketClient.RemoteEndPoint + " :" + System.Text.Encoding.UTF8.GetString(bytes));
6      reviceManager.Set();
7   }

 
 
계속 기다리다.다음 편:Socket 기반 (3) 클라이언트와 서버 연결 및 메시지 수신
저자:gaobing
 
출처:http://gaobing.cnblogs.com
 
제시: 본고의 판권은 작가와 블로그원이 공유하고 있습니다. 전재를 환영하지만 작가의 동의 없이 이 성명을 보류하고 글 페이지의 뚜렷한 위치에 원문 연결을 해야 합니다. 그렇지 않으면 법적 책임을 추궁할 권리를 보류합니다.

좋은 웹페이지 즐겨찾기