多播程序设计(基于UDP协议)
生活随笔
收集整理的這篇文章主要介紹了
多播程序设计(基于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协议)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学渣笔记之矩阵的导数与迹
- 下一篇: Objective-C开发编码规范