日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

多播程序设计(基于UDP协议)

發布時間:2025/3/13 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多播程序设计(基于UDP协议) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先要搞清楚多播IP地址有哪些

D類IP地址就是多播地址,范圍是224.0.0.0 ~ 239.255.255.255

其中又劃分為以下類別

D類地址的劃分

類別地址范圍描述
局部鏈接地址(本地網絡控制塊)224.0.0.0~224.0.0.255用于局域網,路由器不轉發屬于此范圍的IP包
預留多播地址224.0.1.0~238.255.255.255用于全球范圍或網絡協議
管理權限地址239.0.0.0~239.255.255.255組織內部使用,用于限制多播范圍

?

服務器端:

1     private UdpClient udpSend; 2 3 private void button1_Click(object sender, EventArgs e) 4 { 5 //判斷是否為空 6 if(this.richTextBox1.Text == "") 7 { 8 MessageBox.Show("Please input the text"); 9 return; 10 } 11 12 //初始始UdpClient 13 udpSend = new UdpClient(); 14 //允許發送和接收廣播數據報 15 udpSend.EnableBroadcast = true; 16 17 18 //必須使用組播地址范圍內的地址 19 IPEndPoint iep = new IPEndPoint(IPAddress.Parse("224.0.0.10"), 8000); 20 21 byte[] bytes = Encoding.UTF8.GetBytes(this.richTextBox1.Text); 22 23 //發送組播信息 24 try 25 { 26 udpSend.Send(bytes, bytes.Length, iep); 27 } 28 catch(Exception ex) 29 { 30 MessageBox.Show(ex.Message); 31 return; 32 } 33 34 this.richTextBox1.Text = ""; 35 this.richTextBox1.Focus(); 36 }

?

接收多播消息客戶端

1 private void button2_Click(object sender, EventArgs e) 2 { 3 ReceiveMessage(this.richTextBox1); 4 }

用于接收多播消息的ReceiveMessage(RichTextBox textBox)方法

1 private void ReceiveMessage(RichTextBox textBox) 2 { 3 byte[] bytes = null; 4 5 //在本機指定的端口進行接收 6 udpReceive = new UdpClient(8000); 7 8 //將套接字加入組播組 9 udpReceive.JoinMulticastGroup(IPAddress.Parse("224.0.0.10"), 50); 10 11 //接收從遠程主機發送過來的消息 12 IPEndPoint iep = new IPEndPoint(IPAddress.Loopback, 0);//這里是本地測試,所以寫成環回地址 13 //如果是遠程主機,則寫成 IPEndPoint iep = new IPEndPoint(IPAddress.Any,0); 14 15 while(true) 16 { 17 try 18 { 19 bytes = udpReceive.Receive(ref iep); 20 textBox.Text = Encoding.UTF8.GetString(bytes); 21 MessageBox.Show(Encoding.UTF8.GetString(bytes)); 22 } 23 catch(Exception e) 24 { 25 MessageBox.Show(e.Message); 26 return; 27 } 28 } 29 }

?       ?上面接收的代碼邏輯有點問題,因為接收完一次消息,還會一直等著接收下一次消息,會造成阻塞。來個if判斷下就行了

        設置端口號時的0是指自動分配

?

上面加入多播組時用到了TTL

? ? ? ? ? ? ? ? ? ? ? ? ? TTL的極限約定

初始TTL約定初始TTL約定
0多播數據報被限制在同一個主機64多播數據報被限制在同一個地區
1多播數據報被限制在同一個子網128多播數據報被限制在同一個本土
32多播數據報被限制在同一個站點255沒有范圍限制

?

在窗體關閉事件中加上以下代碼用來關閉UDP連接

1 private void Form1_FormClosing(object sender, FormClosingEventArgs e) 2 { 3     if(udpReceive != null) 4  udpReceive.Close(); 5 }

?

轉載于:https://www.cnblogs.com/zhaotianff/p/5547255.html

總結

以上是生活随笔為你收集整理的多播程序设计(基于UDP协议)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。