Presentation is loading. Please wait.

Presentation is loading. Please wait.

助教:廖啟盛 suboy@hotmail.com.tw JAVA Socket(UDP) 助教:廖啟盛 suboy@hotmail.com.tw.

Similar presentations


Presentation on theme: "助教:廖啟盛 suboy@hotmail.com.tw JAVA Socket(UDP) 助教:廖啟盛 suboy@hotmail.com.tw."— Presentation transcript:

1 助教:廖啟盛 suboy@hotmail.com.tw
JAVA Socket(UDP) 助教:廖啟盛

2 TCP和UDP的比較 特徵/協定 連線導向(TCP) 非連線導向(UDP) 資料傳送服務的品質
保證遞送,有錯誤的檢查,保證資料到達的順序,提供流量控制與網路故障通知 資料有可能遺失、重複、延遲或是抵達順序錯誤 Socket程式的呼叫 等候連線與資料的接受是阻絕呼叫(Blocking Call) 資料的接收是阻絕呼叫(Blocking Call) 資料傳送的特徵 資料以連續的方式收送,沒有分隔,接收必須做後處理 資料以傳送所有的大小為單位,接收端可以直接當作獨立的訊息處理 連線成本 使用時機 Unicast Multicast、Broadcast Blocking Call : 在程式執行中遇到Blocking Call,必須等到Blocking原 因移除後才能繼續執行 TCP: UDP:

3 Port (通訊埠) 通訊協定通常是以port來區隔Internet各個應用服 務 通常有16-bit 代表 216=65536種
編號1~1023是保留號(公認) 所以programming時要注意 可用範圍 : 1024~65535

4 各種協定的Port (通訊埠) 協定 Port number Transport 協定 DHCP
67(server) / 68(client) UDP DNS 53 TCP/UDP FTP 21(control) / 20(data) TCP HTTP 80 SMTP 25 Telnet 23 POP3 110

5 Socket Application Socket API TCP UDP Network

6 Socket Socket在網路應用程式開發上,大致有下列兩大 類: Stream Socket
Connection-Oriented Protocol  TCP Datagram Socket Connectionless Protocol  UDP

7 Socket Socket步驟如下: 建立Client Socket 傳送特定資訊或指令至Server
建立時需指定欲連結Server的主機名稱或IP位址( )與Internet服務的port 傳送特定資訊或指令至Server 接收Server回傳的執行結果或錯誤訊息,並以特定 格式顯示 例如:HTTP通訊協定會HTML格式顯示 當Client不需Server的處理時,便關閉Socket通訊 連結

8 Socket API-- Server 所提供的Server端的API函式: Server BSD Socket 說明 socket
bind 設定socket所使用的local端IP位址與通訊埠(Port Number) listen 設定socket等候(listen)Client端連結請求(connection request) accept 接受來自Client端的連結請求,並且建立socket連結 recv read 接收來自Client端所傳來的資料(TCP) recvfrom 接收來自Client端所傳來的資料(UDP) send write 傳送資料至Client端(TCP) sendto 傳送資料至Client端(UDP) closesocket 關閉通訊連結及socket,並且釋放系統資源 shutdown 關閉socket的傳送與接收的功能

9 Socket API-- Client 所提供的Client端的API函式: Client BSD Socket 說明 socket
connect 建立與Server端的socket連線 recv read 接收來自Server端所傳來的資料(TCP) recvfrom 接收來自Server端所傳來的資料(UDP) send write 傳送資料至Server端(TCP) sendto 傳送資料至Server端(UDP) closesocket 關閉通訊連結及socket,並且釋放系統資源 shutdown 關閉socket的傳送與接收的功能

10 UDP Socket Datagram Socket程式開發流程 Server Client Socket() Bind()
Closesocket() Sendto() Recvfrom() ( Blocking Call ) Processing

11 Java Socket API Java.net中支援Datagram Socket (UDP) 應用程式相關的API: Java API
說明 Java.net.DatagramSocket 建立Datagram socket Java.net.DatagramPacket 建立Datagram packet(資料封包) Receive (DatagramSocket) 接收Datagram packet(資料封包) Send (DatagramSocket) 傳送Datagram packet(資料封包) Close 關閉Datagram socket 關鍵字 : Java API

12 JAVA UDP Socket Java Datagram Socket DatagramSocket DatagramPacket
Close send Receive ( Blocking Call) DatagramSocket DatagramPacket Close

13 使用軟體工具--Eclipse 網址 :

14 DEMO

15 範例程式—UDP Server public class Server {
public static void main(String args[]) throws Exception byte buffer[]=new byte[10]; //buffer是10byte的陣列 String msg; int portNo=5555; //設server port System.out.println("Server端開始接受連線請求!"); //print出的文字訊息 for (;;) { DatagramPacket packet = new DatagramPacket(buffer,buffer.length); //建立Datagram packet資料封包,限制packet值和長度大小 DatagramSocket socket=new DatagramSocket(portNo); //建立socket 需要設server port socket.receive(packet); //接收封包 msg=new String(buffer,0,packet.getLength()); //將訊息轉為字串 System.out.println("收到下面的訊息 : " + msg); //print出的文字訊息 socket.close(); //關閉socket

16 範例程式—UDP Client public static void main(String args[]) throws Exception { int portNo =5555; //設server port System.out.print("Please input the IP address of destination :"); //print出的文字訊息 BufferedReader uip= new BufferedReader(new InputStreamReader(System.in)); //輸入到buffer的字串存到UIP中,並讀出UIP中buffer的內容 String ServerIP=uip.readLine(); //將UIP內容讀到ServerIP InetAddress addr=InetAddress.getByName(ServerIP); //抓出ServerIP位址 while (true) { // 一直回傳新訊息 System.out.print("輸入送出的訊息 :"); String msg=uip.readLine(); //讀UIP中的訊息 int oLength=msg.length(); //將訊息長度大小放到oLength byte buffer[]=new byte[oLength]; buffer=msg.getBytes(); //使用平臺的預設字元集將此 String 編碼為 byte 序列,並將結果存儲 到一個新的 byte 陣列中。 DatagramPacket packet= new DatagramPacket(buffer,oLength,addr,portNo); //訊息封包(值,大小, server位址, server port) DatagramSocket socket=new DatagramSocket(); //建立socket socket.send(packet); //送出packet封包訊息 socket.close(); //關閉socket

17 範例程式—執行結果 UDP Server UDP Client

18 注意事項 Port Number只要在DatagramPacket 中設定固定的即可 每個節點執行相同的程式碼 IP
DatagramSocket不用再設定 如程式碼範例 每個節點執行相同的程式碼 此程式碼同時具有Server和Client的功能 Server:需要不斷判斷是否要接收其他節點所傳送的資訊 Client:此節點若有需要更新資料時,傳送給其他節點 可用Thread(執行緒)來撰寫 IP 每個IP同時皆為真實IP 或 同時皆為同一內部網路(LAN)中私有IP,避免無法互相連接


Download ppt "助教:廖啟盛 suboy@hotmail.com.tw JAVA Socket(UDP) 助教:廖啟盛 suboy@hotmail.com.tw."

Similar presentations


Ads by Google