1. 程式人生 > >Socket-tcp協議客戶端與伺服器端互聯

Socket-tcp協議客戶端與伺服器端互聯

客戶端

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

/// <summary>
/// 客戶端
/// </summary>
namespace tcp協議客戶端
{
    class Program
    {
        static void Main(string[] args)
        {
            //建立一個Socket
            Socket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //發起建立連線的請求
            IPAddress iPAddress = IPAddress.Parse("192.168.3.35");//可以字串轉換成ipaddress的物件
            EndPoint point = new IPEndPoint(iPAddress,7788);
            tcpClient.Connect(point);//通過ip和埠號定位一個伺服器端

            //連線成功 接收訊息
            byte[] data = new byte[1024];
            int length = tcpClient.Receive(data);//length表示接收了多少資料
            string message = Encoding.UTF8.GetString(data, 0, length);//只把接收到的資料轉化
            Console.WriteLine(message);

            //--------向伺服器端傳送訊息------------
            string message2 = Console.ReadLine();
            tcpClient.Send(Encoding.UTF8.GetBytes(message2));//把字串轉換為位元組陣列傳送到伺服器端
             

            Console.ReadKey();

        }
    }
}

伺服器端

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Net;

/// <summary>
/// 伺服器端
/// </summary>
namespace tcp協議
{
    class Program
    {
        static void Main(string[] args)
        {
            // 建立Socket
            Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //繫結ip和埠號 192.168.3.35
            IPAddress iPAddress = new IPAddress(new byte[] { 192,168,3,35 });//ipaddress是對ip和埠進行封裝的類
            EndPoint point = new IPEndPoint(iPAddress,7788);// 向系統申請一個可用的ip埠號
            tcpServer.Bind(point);
            //開始監聽(等待客戶端連結)
            tcpServer.Listen(100);//最大連線數
            Console.WriteLine("開始監聽");

            //接收 返回一個clientSocket
            Socket clientScocket= tcpServer.Accept();//暫停當前執行緒,直到一個客戶端連線過來之後進行下面的操作
            Console.WriteLine("一個客戶端連線過來");
            
            //向客戶端傳送一個返回訊息
            string message = "hallo 你好";
            byte[] data= Encoding.UTF8.GetBytes(message);//對字串做編碼,等到一個位元組陣列
            clientScocket.Send(data);
            Console.WriteLine("向客戶端傳送了一條資料");

            //-----------------接收伺服器端訊息-------------------
            byte[] data2 = new byte[1024];//傳建一個位元組陣列接收客戶端發來的訊息
            int length = clientScocket.Receive(data2);
            string message2 = Encoding.UTF8.GetString(data2, 0, length);//把位元組陣列轉換為字串
            Console.WriteLine("接收了一條訊息" + message2);

            Console.ReadKey();
        }
    }
}