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.*;
6
7 public class QuoteClient {
8 public static void main(String[] args) throws IOException {
9
10 if (args.length != 1) {
11 System.out.println("Usage: java QuoteClient <hostname>");
12 return;
13 }
14
15 //get a datagram socket
16 DatagramSocket socket = new DatagramSocket();
17
18 //send request
19 byte[] buf = new byte[256];
20 InetAddress address = InetAddress.getByName(args[0]);
21 DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 4445);
22 socket.send(packet);
23
24 //get response
25 packet = new DatagramPacket(buf, buf.length);
26 socket.receive(packet);
27
28 //display response
29 String received = new String(packet.getData(), 0, packet.getLength());
30 System.out.println("Quote of the Moment: " + received);
31
32 socket.close();
33 }
34 }

client 端程式在送出 request 後,會停在第 26 行,以等待 server 端的 response。


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


 1 package idv.steven;
2
3 import java.io.*;
4 import java.net.*;
5 import java.util.*;
6
7 public class QuoteServerThread extends Thread {
8
9 protected DatagramSocket socket = null;
10 protected BufferedReader in = null;
11 protected boolean moreQuotes = true;
12
13 public QuoteServerThread() throws IOException {
14 this("QuoteServerThread");
15 }
16
17 public QuoteServerThread(String name) throws IOException {
18 super(name);
19 socket = new DatagramSocket(4445);
20
21 try {
22 in = new BufferedReader(new FileReader("one-liners.txt"));
23 } catch (FileNotFoundException e) {
24 System.err.println("Could not open quote file. Serving time instead.");
25 }
26 }
27
28 public void run() {
29
30 while (moreQuotes) {
31 try {
32 byte[] buf = new byte[256];
33
34 // receive request
35 DatagramPacket packet = new DatagramPacket(buf, buf.length);
36 socket.receive(packet);
37
38 // figure out response
39 String dString = null;
40 if (in == null)
41 dString = new Date().toString();
42 else
43 dString = getNextQuote();
44
45 buf = dString.getBytes();
46
47 // send the response to the client at "address" and "port"
48 InetAddress address = packet.getAddress();
49 int port = packet.getPort();
50 packet = new DatagramPacket(buf, buf.length, address, port);
51 socket.send(packet);
52 } catch (IOException e) {
53 e.printStackTrace();
54 moreQuotes = false;
55 }
56 }
57 socket.close();
58 }
59
60 protected String getNextQuote() {
61 String returnValue = null;
62 try {
63 if ((returnValue = in.readLine()) == null) {
64 in.close();
65 moreQuotes = false;
66 returnValue = "No more quotes. Goodbye.";
67 }
68 } catch (IOException e) {
69 returnValue = "IOException occurred in server.";
70 }
71 return returnValue;
72 }
73 }

server 端程式啟動後,會先停在第 36 行以等待 request,當收到 request 後程式立即往下執行,server
端的回應內容只是由文字檔 one-liners.txt 中抓取一行文字將它回傳給 client 端。至於 client 端在那? 從程式第 48、49
行可以看到,由 client 端傳來的封包中,可以解析出 client 端的網址和 port 號,因此,server 端知道要將回應值傳向那裡。

UDP 網路程式設計 (2) --- request / response,布布扣,bubuko.com

时间: 2025-01-04 07:27:20

UDP 網路程式設計 (2) --- request / response的相关文章

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

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

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) t

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    

請推薦有關網路的書

转自: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

[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的軟體可編程特性,更有助