C# Socket系列2 TcpListener & TcpClient

这两个类是对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     }
View Code

客户端

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);
        }
    }

  

猜你喜欢

转载自www.cnblogs.com/PandaHome/p/9118264.html