C#socket通訊-----多線程

我在以前的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();


        }
    }
}
相關文章
相關標籤/搜索