UDP 網路程式設計 (3) --- 群播

繼續看 Oracle 的範例程式,在裡面舉出 UDP 最重要的運用 -- 群播,之前兩個範例程式測試的方式都是先執行 server,再執行
client,這個群播程式要反過來,先執行 client 以等待 server 廣播出來的訊息。


1 package idv.steven;
2
3 import java.io.IOException;
4
5 public class MulticastServer {
6 public static void main(String[] args) throws IOException {
7 new MulticastServerThread().start();
8 }
9 }


 1 package idv.steven;
2
3 import java.io.*;
4 import java.net.*;
5 import java.util.*;
6
7 public class MulticastServerThread extends QuoteServerThread {
8
9 private long FIVE_SECONDS = 5000;
10
11 public MulticastServerThread() throws IOException {
12 super("MulticastServerThread");
13 }
14
15 public void run() {
16 while (moreQuotes) {
17 try {
18 byte[] buf = new byte[256];
19
20 // construct quote
21 String dString = null;
22 if (in == null)
23 dString = new Date().toString();
24 else
25 dString = getNextQuote();
26 buf = dString.getBytes();
27
28 // send it
29 InetAddress group = InetAddress.getByName("230.0.0.1");
30 DatagramPacket packet = new DatagramPacket(buf, buf.length, group, 4446);
31 socket.send(packet);
32
33 // sleep for a while
34 try {
35 sleep((long)(Math.random() * FIVE_SECONDS));
36 } catch (InterruptedException e) {
37
38 }
39 } catch (IOException e) {
40 e.printStackTrace();
41 moreQuotes = false;
42 }
43 }
44 socket.close();
45 }
46 }

注意看程式第 29 行,裡面有個 IP -- 230.0.0.1,這是做什麼的? 這個值只要是 UDP 群播的合理 IP
值就可以了,我們可以任意的選擇,也可以傳入 null 表示將作 loopback。這個值會成為群播的"群組",client 端倒底要傾聽那裡傳來的群播訊息?
即是透過指定群組來決定。程式第 30 行的 4446 這個 port 值也很重要,client 端必須傾聽這個 port 才收的到群播的訊息。程式第 31
行,將訊息廣播出去… 程式第 35 行只是停頓數秒,讓我們查看程式的執行比較方便罷了,整個廣播的過程會持續到所有文字檔內容被讀取並傳送完畢為止。

【註】在 IPv4 裡,224.0.0.1 ~ 239.255.255.255 這個網段是被指定作為 multicast 群組。


 1 package idv.steven;
2
3 import java.io.*;
4 import java.net.*;
5 import java.util.*;
6
7 public class MulticastClient {
8
9 public static void main(String[] args) throws IOException {
10
11 MulticastSocket socket = new MulticastSocket(4446);
12 InetAddress address = InetAddress.getByName("230.0.0.1");
13 socket.joinGroup(address);
14
15 DatagramPacket packet;
16
17 // get a few quotes
18 for (int i = 0; i < 5; i++) {
19
20 byte[] buf = new byte[256];
21 packet = new DatagramPacket(buf, buf.length);
22 socket.receive(packet);
23
24 String received = new String(packet.getData(), 0, packet.getLength());
25 System.out.println("Quote of the Moment: " + received);
26 }
27
28 socket.leaveGroup(address);
29 socket.close();
30 }
31 }

client 端程式要注意的就是第 11~13 行,指定要傾聽那個群組、那個 port 的訊息,透過呼叫 joinGroup
後加入這個群組,真正開始傾聽是在程式第 22 行。

UDP 網路程式設計 (3) --- 群播,布布扣,bubuko.com

时间: 2024-10-31 18:38:23

UDP 網路程式設計 (3) --- 群播的相关文章

UDP 網路程式設計 (1) --- Getting Started

在大部份的網路應用裡,TCP 似乎比 UDP 來的多許多,程式人員通常也是對撰寫 TCP 程式比較熟悉,這裡將整理一些 UDP 程式設計的說明,希望對大家有幫助. 一開始先介紹三個最重要的類別,如下: DatagramPacket: UDP 的封包. DatagramSocket: 用來建立 UDP socket 的類別,包含 client 及 server. MulticastSocket: 用來建立群播 UDP socket 的類別,包含 client 和 server. 第一個程式,先寫個

UDP 網路程式設計 (2) --- request / response

在 Oracle 網站上,有個簡單的 UDP 程式範例 --- Lesson: All About Datagrams,這個程式和前一個程式基本上是差不多的,差別在於,它是由 client 先送個 request 給 server 端,server 端接收到後,回應訊息給 client 端,下面是 Oracle 的範例程式. 1 package idv.steven; 2 3 import java.io.*; 4 import java.net.*; 5 import java.util.*;

VR廣告設計與商業

<VR廣告設計與商業>培訓營 課程 By 高煥堂/台灣VR產業聯盟 主席  2016.11月 在Buy+購物的浪潮下,<VR廣告製作>也水漲船高,歡迎您一起來學習VR廣告製作技術. 進入無框世界 我們知道,傳統多媒體大多給觀眾圈定了一個"框",例如TV建構了一個有框世界,讓人們從框外觀看框裡的節目.而VR技術則打破了傳統螢幕的"框",引導人們進入螢幕的框內,給予一個完整的世界.在廣告方面,從"有框"到"無框&qu

NB實體連線到公司的網路,無法上網解決方案,需設 proxy。

未使用 VPN Cisco Anyconnect 已連線到公司的網路: google-chrome-stable --proxy-server="proxy.XXXcomm.com:3128" 未連線到公司的網路: google-chrome-stable 使用 VPN Cisco Anyconnect google-chrome-stable 為什麼實體連線要設 proxy 呢? 因為實體連線後,NB是屬於公司內部電腦的一份子,全部設定要依公司 為什麼 VPN 連線不需要設 prox

FPC Trace Pattern Layout Design Notices (軟板線路設計注意事項)

整理了一些軟板(FPCB/Flex Cable)製造廠關於線路設計的要求 (Design Guide)以避免應用上的品質問題. 1.Relationship between Through Hole, Land, Cover Film, and Cover Coat   Not Recommended(不建議) Recommended(建議)       通孔的焊墊必須用Cover film 覆蓋住,以避免使用時剝落.       2. Circuit Pattern Guidance    

[FPGA] DP83848網路晶片開發心得(1)

最近想要用FPGA來存取網路,於是想到之前買的一個DP88848晶片的網路版子,剛好拿出來研究研究. 查了一下規格它是使用RMII的傳輸介面可以達到10M/100M的速度,應該很夠用了吧. 那第一步就是先研究一下這電路要怎麼接?剛好有在網路找到其電路圖? 買了 一個洞洞板,接到DE0-Nano的GPIO_0,腳位如下: pin discrption GPIO_0[10]: MDC    GPIO_0[11]: MDIO GPIO_0[12]: CRS     GPIO_0[13]: OSCIN

通過數據了解用戶——數據在新品設計中的應用

通常情況下,我們可以通過用戶訪談的方法了解用戶需求,其實設計師還可以通過分析用戶問卷調查數據以及網站頁面數據等方式,了解用戶需求以及用戶在使用產品時遇到的問題. 而且,直接通過接觸用戶了解到的需求有可能只是個案,為了增強客觀性,通常都會通過大樣本調查,從數據實證的角度,進一步更準確和客觀地找到用戶的普遍需求. 此外,通過對數據分析結果與用戶訪談所得到的定性分析結論,進行比較和綜合分析,設計師也能夠從不同的角度了解用戶的真實需求. 從用研的角度來看,交互設計包括新產品設計以及已有產品的改版設計兩大

馬達控制、機器視覺及工業乙太網路交換器係工廠自動化不可或缺的三大環節

隨著亞洲人力雇用成本攀升,加上北美大力推行製造業回流政策,全球主要3C產品製造工廠以機器取代人工的需求已日益殷切,激勵歐美.日本和台灣工業設備大廠加緊研發機器手臂.機器人與產線自動化設備,因而帶動龐大的馬達控制.機器視覺和工業乙太網路解決方案導入需求. SoC FPGA整合可編程邏輯和多核CPU.DSP或軟核(Soft-core)MCU,兼具高速邏輯運算.即時控制與平行處理優點,可支援快速傅立葉轉換(FFT)等高階演算法,並縮減大量資料乘加運算的功耗.此外,其透過FPGA的軟體可編程特性,更有助

請推薦有關網路的書

转自:http://linux.vbird.org/linux_basic/0120howtolinux/0120howtolinux_1.php ----- Original Message ----- From: "網中人" Newsgroups: tw.bbs.comp.network Sent: Thursday, September 27, 2001 2:33 PM Subject: Re: 請推薦有關網路的書.... > > > "藍色的海&qu