这两个类是对socket的进一步封装
服务端
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 TcpListener listener = null; 6 listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 9999); 7 listener.Start(); 8 listener.BeginAcceptTcpClient(new AsyncCallback(acceptCall), listener); 9 Console.ReadKey(); 10 } 11 12 private static void acceptCall(IAsyncResult ar) 13 { 14 TcpListener lstn = ar.AsyncState as TcpListener; 15 TcpClient client = lstn.EndAcceptTcpClient(ar); 16 Task.Run(() => { 17 string host = client.Client.RemoteEndPoint.ToString(); 18 NetworkStream stream = client.GetStream(); 19 try 20 { 21 while (true) 22 { 23 byte[] buffer = new byte[sizeof(int)]; 24 stream.Read(buffer, 0, sizeof(int)); 25 int len = BitConverter.ToInt32(buffer, 0); 26 buffer = new byte[len]; 27 stream.Read(buffer, 0, len); 28 string resMsg = Encoding.UTF8.GetString(buffer); 29 if (resMsg == "Q") 30 { 31 string message = "客户端" + host + "发出退出请求"; 32 Console.WriteLine(message); 33 break; 34 } 35 else 36 { 37 string message = "收到" + host + "发的消息:" + resMsg; 38 Console.WriteLine(message); 39 } 40 } 41 } 42 catch (Exception e) 43 { 44 45 Console.WriteLine(e.Message); 46 } 47 stream.Close(); 48 client.Close(); 49 }); 50 51 lstn.BeginAcceptTcpClient(new AsyncCallback(acceptCall), lstn); 52 } 53 54 55 }
客户端
class Program { static TcpClient client; static void Main(string[] args) { client = new TcpClient("127.0.0.1", 9999); while (true)//发送 { string msg = Console.ReadLine(); if (msg == "Q") { SendMessage(msg); break; } else SendMessage(msg); } } private static void SendMessage(string msg) { if (client == null) return; if (client.Connected == false) return; byte[] data = Encoding.UTF8.GetBytes(msg); int len = data.Length; byte[] buffer = BitConverter.GetBytes(len); client.GetStream().Write(buffer, 0, sizeof(int)); client.GetStream().Write(data, 0, data.Length); } }