C# Socket服务端和客户端互相send和receive

时间:2023-03-09 20:33:22
C# Socket服务端和客户端互相send和receive

服务端

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 using System.Net.Sockets;
 5 using System.Net;
 6 using System.Threading;
 7 
 8 namespace Controller
 9 {
     public static class SocketServer
     {
         private static byte[] result = new byte[];
         private static int myProt = ;   //端口
         private static Socket serverSocket;
         private static List<Socket> clientSockets=new List<Socket>();
         public static void Init()
         {
             //服务器IP地址
             IPAddress ip = IPAddress.Parse("127.0.0.1");
             serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
             serverSocket.Bind(new IPEndPoint(ip, myProt));  //绑定IP地址:端口
             serverSocket.Listen();    //设定最多10个排队连接请求
             Console.WriteLine("启动监听{0}成功", serverSocket.LocalEndPoint.ToString());
             //通过Clientsoket发送数据
             Thread myThread = new Thread(ListenClientConnect);
             myThread.Start();
             Console.ReadLine();
         }
 
         /// <summary>
         /// 监听客户端连接
         /// </summary>
         private static void ListenClientConnect()
         {
             while (true)
             {
                 Socket clientSocket = serverSocket.Accept();
                 clientSockets.Add(clientSocket);
                 Thread receiveThread = new Thread(ReceiveMessage);
                 receiveThread.Start(clientSocket);
             }
         }
 
         /// <summary>
         /// 接收消息
         /// </summary>
         /// <param name="clientSocket"></param>
         private static void ReceiveMessage(object clientSocket)
         {
             Socket myClientSocket = (Socket)clientSocket;
             while (true)
             {
                 try
                 {
                     //通过clientSocket接收数据
                     int receiveNumber = myClientSocket.Receive(result);
                     string strContent = Encoding.ASCII.GetString(result, , receiveNumber);
                     Console.WriteLine("接收客户端{0}消息{1}", myClientSocket.RemoteEndPoint.ToString(), Encoding.ASCII.GetString(result, , receiveNumber));
                 }
                 catch (Exception ex)
                 {
                     Console.WriteLine(ex.Message);
                     myClientSocket.Shutdown(SocketShutdown.Both);
                     myClientSocket.Close();
                     break;
                 }
             }
         }
 
         public static void SendMessage(string message)
         {
             foreach(Socket clientSocket in clientSockets)
                 clientSocket.Send(Encoding.ASCII.GetBytes(message));
         }
     }
 }

客户端

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 using System.Net.Sockets;
 5 using System.Net;
 6 using System.Threading;
 7 
 8 namespace Player
 9 {
     public static class SocketClient
     {
         private static Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
         private static byte[] result = new byte[];
         public static void Init()
         {
             //设定服务器IP地址
             IPAddress ip = IPAddress.Parse("127.0.0.1");            
             try
             {
                 clientSocket.Connect(new IPEndPoint(ip, )); //配置服务器IP与端口
                 Console.WriteLine("连接服务器成功");
             }
             catch
             {
                 Console.WriteLine("连接服务器失败,请按回车键退出!");
                 return;
             }
 
             Thread receiveThread = new Thread(ReceiveMessage);
             receiveThread.Start();
             
         }
         /// <summary>
         /// 接收消息
         /// </summary>
         /// <param name="clientSocket"></param>
         private static void ReceiveMessage()
         {            
             while (true)
             {
                 try
                 {
                     //通过clientSocket接收数据
                     int receiveNumber = clientSocket.Receive(result);
                     string strContent = Encoding.ASCII.GetString(result, , receiveNumber);
                     Console.WriteLine("接收服务端{0}消息{1}", clientSocket.RemoteEndPoint.ToString(), Encoding.ASCII.GetString(result, , receiveNumber));
                 }
                 catch (Exception ex)
                 {
                     Console.WriteLine(ex.Message);
                     clientSocket.Shutdown(SocketShutdown.Both);
                     clientSocket.Close();
                     break;
                 }
             }
         }
         public static void SendMessage(string message)
         {
             string sendMessage = message;
             clientSocket.Send(Encoding.ASCII.GetBytes(sendMessage));
         }
     }
 }