欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#使用Socket進(jìn)行簡單的通訊的示例代碼

 更新時間:2023年12月25日 10:02:38   作者:rjcql  
Socket 類是基于與 Linux、macOS 或 Windows 的本機(jī)互操作性提供的托管代碼版本的套接字服務(wù),提供了一系列的接口來支持應(yīng)用層的調(diào)用,下面我們就來學(xué)習(xí)一下如何使用Socket進(jìn)行簡單的通訊,需要的可以參考下

寫在前面

在.Net的 System.Net.Sockets 命名空間中包含托管的跨平臺套接字網(wǎng)絡(luò)實現(xiàn)。 System.Net 命名空間中的所有其他網(wǎng)絡(luò)訪問類均建立在套接字的此實現(xiàn)之上。

其中的Socket 類是基于與 Linux、macOS 或 Windows 的本機(jī)互操作性提供的托管代碼版本的套接字服務(wù),提供了一系列的接口來支持應(yīng)用層的調(diào)用。

本文只是提供一個可運(yùn)行的基本示例,如果想深入了解關(guān)于TCP/IP協(xié)議的部分,可自行做更深入的知識拓展。

示例的代碼實現(xiàn)的服務(wù)端和客戶端的流程如下,展現(xiàn)了使用Socket進(jìn)行一個完整的構(gòu)建和通訊流程

服務(wù)器端:

第一步:建立一個用于通信的Socket對象

第二步:使用bind綁定IP地址和端口號

第三步:使用listen監(jiān)聽客戶端

第四步:使用accept中斷程序直到連接上客戶端

第五步:接收來自客戶端的請求

第六步:返回客戶端需要的數(shù)據(jù)

第七步:如果接收到客戶端已關(guān)閉連接信息就關(guān)閉服務(wù)器端

客戶端:

第一步:建立一個用于通信的Socket對象

第二步:根據(jù)指定的IP和端口connet服務(wù)器

第三步:連接成功后向服務(wù)器端發(fā)送數(shù)據(jù)請求

第四步:接收服務(wù)器返回的請求數(shù)據(jù)

第五步:如果還需要請求數(shù)據(jù)繼續(xù)發(fā)送請求

第六步:如果不需要請求數(shù)據(jù)就關(guān)閉客戶端并給服務(wù)器發(fā)送關(guān)閉連接信

代碼實現(xiàn)

服務(wù)端部分

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
 
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Socket Server");
 
        // 創(chuàng)建服務(wù)端Socket對象
        var serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        serverSocket.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9090));
        serverSocket.ReceiveTimeout = 1000;
        serverSocket.SendTimeout = 1000;
        serverSocket.Listen(1000);
        Console.WriteLine("服務(wù)端啟動監(jiān)聽");
 
        var clientSocket = serverSocket.Accept();
 
        Console.WriteLine("有客戶端連上了");
 
        var task = Task.Run(() =>
        {
            while (true) {
                var receivedMsg = string.Empty;
                var receivedBytes = new byte[1024];
                var bytes = clientSocket.Receive(receivedBytes, receivedBytes.Length, 0);
                if (bytes > 0)
                {
                    receivedMsg += Encoding.UTF8.GetString(receivedBytes, 0, bytes);
                    Console.WriteLine("收到消息:" + receivedMsg);
                }
                // 服務(wù)端心跳間隔
                Thread.Sleep(1000);
            }
        });
 
        Console.ReadLine();
    }
}

客戶端部分

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
 
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Socket Client");
 
        // 創(chuàng)建客戶端Socket對象
        var clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        clientSocket.ReceiveTimeout = 1000;
        clientSocket.SendTimeout = 1000;
        clientSocket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9090));
        Console.WriteLine("客戶端開始連接");
         
        var task = Task.Run(() =>
        {
            var idx = 0;
            while (true)
            {
                var sendMsg = "來自客戶端消息" + (++idx);
                clientSocket.Send(Encoding.UTF8.GetBytes(sendMsg));
                Console.WriteLine("客戶端發(fā)送的數(shù)據(jù):" + sendMsg);
                // 客戶端心跳間隔
                Thread.Sleep(1000);
            }
        });
 
        Console.ReadLine();
    }
}

運(yùn)行示例

 總結(jié)

之前的項目中一般是用現(xiàn)成的成熟框架來做通訊實現(xiàn),本例純粹是做個關(guān)于底層類庫原理知識點的梳理,關(guān)于粘包分包和多線程多頻道的處理,后續(xù)有時間再做深入的實踐。

到此這篇關(guān)于C#使用Socket進(jìn)行簡單的通訊的示例代碼的文章就介紹到這了,更多相關(guān)C# Socket通訊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論