private static void ReceiveCallback(IAsyncResult ar) { try { EchoState echoState = (EchoState)ar.AsyncState; Socket clientSocket = echoState.socket; int count = clientSocket.EndReceive(ar); // 关闭客户端 if (count == 0) { clientSocket.Close(); clients.Remove(clientSocket); Console.WriteLine("Socket Close"); return; } string readStr = System.Text.Encoding.Default.GetString(echoState.readBuff, 0, count); byte[] sendBytes = System.Text.Encoding.Default.GetBytes(readStr); clientSocket.Send(sendBytes); clientSocket.BeginReceive(echoState.readBuff, 0, 1024, 0, ReceiveCallback, echoState); } catch (SocketException e) { Console.WriteLine("Socket Receive fail" + e.ToString()); } }
private static void AcceptCallback(IAsyncResult ar) { try { Console.WriteLine("[服务器] Accept"); Socket listenSocket = (Socket)ar.AsyncState; Socket clientSocket = listenSocket.EndAccept(ar); // clients列表 EchoState echoState = new EchoState(); echoState.socket = clientSocket; clients.Add(clientSocket, echoState); // 接收数据BeginReceive clientSocket.BeginReceive(echoState.readBuff, 0, 1024, 0, ReceiveCallback, echoState); } catch (Exception e) { Console.WriteLine("Socket Accept fail" + e.ToString()); } }