C#socket通信-----多线程
我在之前的socket通信的基础上做了一点改进,使用多线程来使用,程序更加简洁实用。不足之处请指教哦!
话不多说,之前的随笔也有介绍,直接上代码啦!
注意:socket发送接收的都是字节数据
服务端socket(serverSocket):
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Net; 7 using System.Threading; 8 using System.Net.Sockets; 9 10 namespace serverSocketTest6 11 { 12 class Program 13 { 14 static Socket serverSocket; 15 static int port = 2723; 16 17 static void Main(string[] args) 18 { 19 Console.WriteLine("服务端:"); 20 21 //实例化socket类 22 serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); 23 IPAddress ip = IPAddress.Parse("173.168.5.15"); 24 //标识网络地址 25 EndPoint point = new IPEndPoint(ip,port); 26 //绑定IP地址和端口号 27 serverSocket.Bind(point); 28 29 //开始监听客户端的连接 30 serverSocket.Listen(10); 31 Console.WriteLine("等待客户端连接..."); 32 33 Thread myThread = new Thread(ListenClientSocket); 34 myThread.Start(); 35 36 37 Console.ReadKey(); 38 39 40 41 } 42 43 /// <summary> 44 /// 监听客户端 45 /// </summary> 46 static void ListenClientSocket() 47 { 48 while (true) 49 { 50 Socket clientSocket = serverSocket.Accept();//接受客户端的连接 51 Console.WriteLine("客户端连接成功"); 52 53 string message = "2017,新的开始,新年快乐!加油!继续努力!!!"; 54 byte[] data=Encoding.UTF8.GetBytes(message); 55 clientSocket.Send(data); 56 57 Thread receive = new Thread(receiveSocket);//receiveSocket 被传递的方法 58 receive.Start(clientSocket); //clientSocket 被传递的参数 59 } 60 61 } 62 63 /// <summary> 64 /// 接收来自客户端的消息 65 /// </summary> 66 static void receiveSocket(object clientSocket) ////// 这里的参数是线程中的参数,参数类型必须是object类型 67 { 68 Socket myClientSocket = (Socket)clientSocket; //// 将object类型的参数转换成socket类型 使用参数来启动线程,执行后面的代码 69 while (true) 70 { 71 byte[] data=new byte[1024]; 72 int length = myClientSocket.Receive(data); 73 string message=Encoding.UTF8.GetString(data,0,length); 74 Console.WriteLine("接收到来自客户端的消息:"+message); 75 76 77 } 78 } 79 } 80 }
客户端的代码基本没变~
客户端socket(clientSocket):
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net; using System.Threading; using System.Net.Sockets; namespace clientSocketTest6 { class Program { static Socket clientSocket; static int port = 2723; static void Main(string[] args) { Console.WriteLine("客户端:"); //实力化一个socket类 clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ip = IPAddress.Parse("173.168.5.15"); //客户端请求与服务端的连接 clientSocket.Connect(ip, port); Console.WriteLine("服务器连接成功."); //接受数据 byte[] data = new byte[1024]; int length = clientSocket.Receive(data); string message = Encoding.UTF8.GetString(data, 0, length); Console.WriteLine("接受到来自服务端的祝福:" + message); //向服务端发送数居 for (int i = 0; i < 10; i++) { Thread.Sleep(2000);//使该线程暂停(休眠)2s string message2 = "Fighting!!"; //可以写成string message2=Console.ReadLine(); byte[] data2 = Encoding.UTF8.GetBytes(message2); clientSocket.Send(data2); Console.WriteLine("向服务端发送消息:{0}",message2); } Console.ReadKey(); } } }