中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#如何實現TCP和UDP通信

發布時間:2023-03-11 16:16:48 來源:億速云 閱讀:180 作者:iii 欄目:開發技術

本篇內容主要講解“C#如何實現TCP和UDP通信”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C#如何實現TCP和UDP通信”吧!

C#在命名空間System.Net.Sockets中對伯克利套接字提供了良好的封裝,提供了完善的TCP和UDP通信功能。

從編程的角度出發,TCP和UDP最大的區別是,TCP存在TcpClientTcpLinster兩個對象用于信息的傳遞,二者一發一收,十分完備。而UDP則只有一個類UdpClient,換言之,UDP通信是不分服務端和客戶端,通信雙方對等。

UDP發送

至少在形式上,UDP比TCP更簡單,所以先從UDP講起。

考慮到通信那肯定是有發有收才行,如果只用C#自己,那么肯定得上個多線程什么的才能跑通。為了避免問題復雜化,故推薦使用這款NetAssist網絡助手。

有了這個,只要在C#里寫一套發送代碼,就可以在NetAssist上看到發送的內容,比較實用。又因為采用頂級語句,導致用下面這區區幾行代碼就可以完成一次套接字編程的實踐,非常劃算

using System.Net.Sockets;
using System.Net;
using System.Text;

//由于收發都在本機,所以只用一個IP地址
IPAddress addr = IPAddress.Parse("127.0.0.1");

var ptLocal = new IPEndPoint(addr, 9001);  //本機節點,用于發送
var ptDst = new IPEndPoint(addr, 9002);    //目標節點

var udp = new UdpClient(ptLocal);          //在本地建立udp服務
byte[] buffer = Encoding.UTF8.GetBytes("hello");
udp.Send(buffer, buffer.Length, ptDst);    //將內容發給ptDst

效果為

C#如何實現TCP和UDP通信

在網絡中,兩個電腦要想通信,那么必須要知道彼此的位置,而在網絡中描述一個計算機的位置,用的就是IP地址。但光有一個地址還不行,計算機要處理這么多任務,接收這么多服務,在IP地址之外還得有個端口才可以。這種感覺大致相當于,IP是一棟樓,端口就是門牌號。

而127.0.0.1是一個特殊的地址,即主機環回地址,很好理解,就是指向本地的地址,有了這個,就可以自己和自己通信了。

UDP接收

發送和接收看上去是對偶,但難度上完全是兩回事,這種感覺就像你給女神發消息,其實很方便,按下發送鍵就完事兒了。但你等女神的消息,那就比較煎熬,因為你不確定她什么時候會發過來,所以得一直等著。

所以,接收比發送麻煩多了,最起碼得有一個死循環,如果對方沒消息,就死等。

// 前面的代碼和發送代碼一樣
while (true)
{
    var received = udp.Receive(ref ptDst);
    string info = Encoding.UTF8.GetString(received);
    info =$" {ptDst.Address}:{ptDst.Port}:{info}";
    Console.WriteLine(info);
    byte[] buf = Encoding.UTF8.GetBytes("What are our children's names");
    udp.Send(buf, buf.Length, ptDst);    //將內容發給ptDst
}

其中udp.Receive就起到死等的作用,如果收不到,程序就不執行,最后結果如下

C#如何實現TCP和UDP通信

TCP發送

UDP協議的好處是,UdpClient包打天下,既可以發送也可以接收,而發送者和接收者的身份,需要通過端口號來區分。

TCP則不然,TCP本身分為服務端和客戶端,服務端在C#中用TcpListener類來實現,觀其名而知其義,服務端的作用是監聽,相應地客戶端TcpClient用于發送。其通信邏輯是,客戶端將發送工具和消息內容一起發送給服務端,服務端再用客戶端自己的發送工具進行回信。

NetAssist同樣提供了TCP的發送和接收功能,為了讓C#代碼相對簡單,這里先選擇服務端,即TCP Server,端口選擇9002,接下來仍用最短的代碼來演示一下C#的TCP發送功能,需要注意客戶端和服務端的端口需要統一一下。

// 引用的命名空間還是上面這些
TcpClient tcp = new TcpClient("127.0.0.1", 9002);
NetworkStream n = tcp.GetStream();
var w = new BinaryWriter(n);
byte[] buffer = Encoding.UTF8.GetBytes("hello");
w.Write(buffer, 0, buffer.Length);
w.Flush();

效果如下

C#如何實現TCP和UDP通信

TCP接收

TCP的接收從邏輯上來說要比UDP更高級一點,畢竟TcpListener又稱服務端,名義上來說要服務于所有人。

TcpListener serv = new TcpListener(IPAddress.Any, 9002);
serv.Start();

Byte[] bytes = new Byte[256];
int i;
while (true)
{
    var c = serv.AcceptTcpClient();
    var n = c.GetStream();
    while ((i = n.Read(bytes, 0, bytes.Length)) != 0)
    {
        var msg = Encoding.ASCII.GetString(bytes, 0, i);
        Console.WriteLine($"Received: {msg}");
        msg += ", too";
        var data = Encoding.ASCII.GetBytes(msg);
        n.Write(data, 0, data.Length);
    }
}

上面代碼中,serv.AcceptTcpClient()根據監控到的信息,返回一個新的客戶端對象;c.GetStream()返回一個網絡流對象,和其他Stream一樣,通過Read方法,可以將二進制數據寫入到字節數組中。

效果如下

C#如何實現TCP和UDP通信

到此,相信大家對“C#如何實現TCP和UDP通信”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

蒲江县| 龙口市| 清水县| 衡阳县| 安泽县| 金坛市| 望奎县| 六盘水市| 固始县| 平定县| 南雄市| 密山市| 余姚市| 赣榆县| 三河市| 德阳市| 林甸县| 谷城县| 巴马| 芦溪县| 邢台县| 松阳县| 荔波县| 河间市| 宁津县| 汉中市| 贡嘎县| 庆元县| 高淳县| 荣成市| 包头市| 胶州市| 句容市| 明溪县| 邹城市| 浪卡子县| 中宁县| 蓬安县| 平武县| 虹口区| 沂南县|