C#使用UdpClient類進(jìn)行簡單通信的實(shí)例
UdpClient 類提供了一些簡單的方法,用于在阻止同步模式下發(fā)送和接收無連接 UDP 數(shù)據(jù)報。 因?yàn)?UDP 是無連接傳輸協(xié)議,所以不需要在發(fā)送和接收數(shù)據(jù)前建立遠(yuǎn)程主機(jī)連接。但您可以選擇使用下面兩種方法之一來建立默認(rèn)遠(yuǎn)程主機(jī):
- 使用遠(yuǎn)程主機(jī)名和端口號作為參數(shù)創(chuàng)建 UdpClient 類的實(shí)例。
- 創(chuàng)建 UdpClient 類的實(shí)例,然后調(diào)用 Connect 方法。
可以使用在 UdpClient 中提供的任何一種發(fā)送方法將數(shù)據(jù)發(fā)送到遠(yuǎn)程設(shè)備。 使用 Receive 方法可以從遠(yuǎn)程主機(jī)接收數(shù)據(jù)。
UdpClient 方法還允許發(fā)送和接收多路廣播數(shù)據(jù)報。 使用 JoinMulticastGroup 方法可以將 UdpClient 預(yù)訂給多路廣播組。 使用 DropMulticastGroup 方法可以從多路廣播組中取消對 UdpClient 的預(yù)訂。
/// <summary> /// 客戶端 /// </summary> class UDPSender { static void Main(string[] args) { //創(chuàng)建一個UdpClient對象,0表示系統(tǒng)自動分配發(fā)送端口 //(若同時在本機(jī)運(yùn)行服務(wù)端和客戶端,則服務(wù)端接收和客戶端發(fā)送需要使用不同端口,否則兩個程序使用同一端口將引發(fā)沖突) UdpClient udpSender = new UdpClient(0); //連接到服務(wù)端并指定接收端口 udpSender.Connect("localhost", 11000); //連接到子網(wǎng)廣播地址并指定接收端口 //udpSender.Connect("192.168.1.255", 11000); //(在使用TCP/IP協(xié)議的網(wǎng)絡(luò)中,主機(jī)標(biāo)識段全為1的IP地址為廣播地址,廣播地址傳送給主機(jī)標(biāo)識段所涉及的所有計算機(jī)。 //例如,對于192.168.1.0(255.255.255.0)網(wǎng)段,其廣播地址為192.168.1.255(255的2進(jìn)制即為11111111), //當(dāng)發(fā)出目的地址為192.168.1.255時,它將分發(fā)給該網(wǎng)段上的所有計算機(jī)。) //把消息轉(zhuǎn)換成字節(jié)流發(fā)送到服務(wù)端 byte[] sendBytes = Encoding.ASCII.GetBytes("Is anybody there?"); udpSender.Send(sendBytes, sendBytes.Length); //關(guān)閉鏈接 udpSender.Close(); } }
/// <summary> /// 服務(wù)端 /// </summary> class UDPReceive { static void Main(string[] args) { //創(chuàng)建一個UdpClient對象,11000為接收端口 UdpClient udpReceive = new UdpClient(11000); //設(shè)置遠(yuǎn)程主機(jī),(IPAddress.Any, 0)代表接收所有IP所有端口發(fā)送的數(shù)據(jù) IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);//或 IPEndPoint remoteIpEndPoint = null; //監(jiān)聽數(shù)據(jù),接收到數(shù)據(jù)后,把數(shù)據(jù)轉(zhuǎn)換成字符串并輸出 byte[] receiveBytes = udpReceive.Receive(ref remoteIpEndPoint); string returnData = Encoding.ASCII.GetString(receiveBytes); Console.WriteLine("This is the message you received " + returnData.ToString()); Console.WriteLine("This message was sent from " + remoteIpEndPoint.Address.ToString() + " on their port number " + remoteIpEndPoint.Port.ToString()); //關(guān)閉連接 udpReceive.Close(); } }
備注:需要先運(yùn)行服務(wù)端,再運(yùn)行客戶端。否則客戶端在服務(wù)端運(yùn)行之前就已經(jīng)發(fā)出數(shù)據(jù),則服務(wù)端不會接收到數(shù)據(jù)。
下面是使用 UdpClient 類進(jìn)行多路廣播組的簡單例子,加入相同的廣播組地址即可實(shí)現(xiàn)多播。多路廣播地址的范圍從 224.0.0.0 到 239.255.255.255 ,服務(wù)端和客戶端使用同一廣播地址即可實(shí)現(xiàn)多播。
/// <summary> /// 多路廣播組客戶端 /// </summary> class MulticastGroupClient { static void Main(string[] args) { //創(chuàng)建一個UdpClient對象,0表示系統(tǒng)自動分配發(fā)送端口 var client = new UdpClient(0); //將廣播地址添加到多路廣播組,生存期(路由器跳數(shù))為10 var ip = IPAddress.Parse("234.56.78.90"); client.JoinMulticastGroup(ip, 10); //定義終結(jié)點(diǎn)(服務(wù)端IP和接收端口),把消息轉(zhuǎn)換成字節(jié)流后發(fā)送到服務(wù)端 var multicast = new IPEndPoint(ip, 7788); byte[] bytes = Encoding.ASCII.GetBytes("Hello from multicast."); client.Send(bytes, bytes.Length, multicast); } }
/// <summary> /// 多路廣播組服務(wù)端 /// </summary> class MulticastGroupServer { static void Main(string[] args) { //創(chuàng)建一個UdpClient對象,7788為接收端口 var client = new UdpClient(7788); //將廣播地址添加到多路廣播組,生存期(路由器跳數(shù))為10 var ip = IPAddress.Parse("234.56.78.90"); client.JoinMulticastGroup(ip, 10); //設(shè)置遠(yuǎn)程主機(jī),(IPAddress.Any, 0)代表接收所有IP所有端口發(fā)送的數(shù)據(jù) var multicast = new IPEndPoint(IPAddress.Any, 0);//或 IPEndPoint multicast = null; //監(jiān)聽數(shù)據(jù),接收到數(shù)據(jù)后,把數(shù)據(jù)轉(zhuǎn)換成字符串并輸出 byte[] bytes = client.Receive(ref multicast); string msg = Encoding.ASCII.GetString(bytes); Console.WriteLine(msg); } }
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持我們!
欄 目:C#教程
下一篇:C#實(shí)現(xiàn)根據(jù)實(shí)體類自動創(chuàng)建數(shù)據(jù)庫表
本文標(biāo)題:C#使用UdpClient類進(jìn)行簡單通信的實(shí)例
本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/6084.html
您可能感興趣的文章
- 01-10C#實(shí)現(xiàn)實(shí)體類與字符串互相轉(zhuǎn)換的方法
- 01-10C#通過Semaphore類控制線程隊列的方法
- 01-10C#使用Dispose模式實(shí)現(xiàn)手動對資源的釋放
- 01-10C#3.0使用EventLog類寫Windows事件日志的方法
- 01-10C#操作ftp類完整實(shí)例
- 01-10C#使用windows服務(wù)開啟應(yīng)用程序的方法
- 01-10c# ArrayList的使用方法小總結(jié)
- 01-10winform簡單緩存類實(shí)例
- 01-10C#實(shí)現(xiàn)控制攝像頭的類
- 01-10C#使用ADO.Net部件來訪問Access數(shù)據(jù)庫的方法


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻 器左下角滾動新
- 01-10C#停止線程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10delphi制作wav文件的方法
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 04-02jquery與jsp,用jquery
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10C#中split用法實(shí)例總結(jié)