我在以前的socket通訊的基礎上作了一點改進,使用多線程來使用,程序更加簡潔實用。不足之處請指教哦!服務器
話很少說,以前的隨筆也有介紹,直接上代碼啦!網絡
注意:socket發送接收的都是字節數據多線程
服務端socket(serverSocket):socket
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 }
客戶端的代碼基本沒變~spa
客戶端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(); } } }