1. 程式人生 > >(C#)使用tcp協議實現訊息的接收

(C#)使用tcp協議實現訊息的接收

1.socket程式設計-tcp伺服器端

建立Socket

將Socket繫結ip跟埠號。IPEndPoint是對ip+埠做了封裝

用IPAddress儲存ip

使用Socket類中Bind來進行繫結,Listen方法設定最大連線數。

Accept方法暫停當前執行緒,直到有一個客戶端連結過來,再往下進行。

接收到客戶端訊息,向客戶端傳送一個訊息。socket只能傳送Byte型別的資料。

class Program
    {
        static void Main(string[] args)
        {
            //1.建立socket
            Socket tcpServer = new Socket
           (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //2.繫結ip跟埠號
            IPAddress ipaddress = new IPAddress(new byte[]{192,168,1,103});
            EndPoint point = new IPEndPoint(ipaddress,7788);//ipendpoint是對ip+埠做了一層封裝的類
            tcpServer.Bind(point);//向作業系統申請一個可用的port和ip用來做通訊
            //3.監聽(等待客戶端連線)
            tcpServer.Listen(100);//引數是最大連線數

            //4.暫停當前執行緒,直到有一個客戶端連結過來,之後進行下面的程式碼.使用返回的Socket跟客戶端做通訊
            Socket clientSocket =  tcpServer.Accept();
            string message = "hello 歡迎你";
            byte[] data = Encoding.UTF8.GetBytes(message);
            clientSocket.Send(data);
        }
    }

2.tcp客戶端

 建立Socket

通過ip和port定位一個要連線的伺服器

定義byte 將接收到的資料儲存再data中

將接收到的資料轉換成string

class Program
    {
        static void Main(string[] args)
        {
            //1.socket creat
            Socket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //2.發起建立連線的請求
            IPAddress ipaddress = IPAddress.Parse("192.168.1.103");
            EndPoint point = new IPEndPoint(ipaddress,7788);
            tcpClient.Connect(point);//通過IP和Port定位一個要連線道德伺服器端

            //3.接受伺服器端發過來的訊息
            byte[] data = new byte[1024];
            int length = tcpClient.Receive(data);//length表示接受了多少位元組的資料

            string message = Encoding.UTF8.GetString(data, 0, length);
            Console.WriteLine(message);
            Console.ReadKey();
        }
    }

3.客戶端傳送訊息給伺服器

客戶端

            string message2 = Console.ReadLine();
            tcpClient.Send(Encoding.UTF8.GetBytes(message2));

伺服器端

            byte[] data2 = new byte[1024];//儲存客戶端傳送過來的資料
            int length =  clientSocket.Receive(data2);
            string message2 = Encoding.UTF8.GetString(data2, 0,length);
            Console.WriteLine("接收到客戶端傳送的訊息" + message2);