2019/5/20 JAVA Socket(UDP)
TCP和UDP的比較 特徵/協定 連線導向(TCP) 非連線導向(UDP) 資料傳送服務的品質 2019/5/20 特徵/協定 連線導向(TCP) 非連線導向(UDP) 資料傳送服務的品質 保證遞送,有錯誤的檢查,保證資料到達的順序,提供流量控制與網路故障通知 資料有可能遺失.重複.延遲或是抵達順序錯誤 Socket程式的呼叫 等候連線與資料的接受是阻絕呼叫(Blocking Call) 資料的接收是阻絕呼叫(Blocking Call) 資料傳送的特徵 資料已連續的方式收送,沒有分隔,接收必須做後處理 資料以傳送所有的大小為單位,接收端可以直接當作獨立的訊息處理 連線成本 連線的成本高 連線的成本低 Blocking Call : 在程式執行中遇到Blocking Call,必須等到Blocking原 因移除後才能繼續執行 TCP: UDP:
Port (通訊埠) 通訊協定通常是以port來區隔Internet各個應用 服務的. 通常有16bits代表 216=65536種 2019/5/20 通訊協定通常是以port來區隔Internet各個應用 服務的. 通常有16bits代表 216=65536種 編號1~1023是保留號(公認) 所以programming時要注意 可用範圍 : 1024~65535
各種協定的Port (通訊埠) 協定 Port number Transport 協定 DHCP 2019/5/20 協定 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
Socket 2019/5/20 Socket步驟如下: 建立Client Socket,在建立時需指定欲連結 Server的主機名稱或IP位址與Internet服務的 port 傳送特定資訊或指令至Server 接收Server回傳的執行結果或錯誤訊息,並以特 定格式顯示,例如:HTTP通訊協定會HTML格式 顯示 當Client不需Server的處理時,便關閉Socket通 訊連結
Socket 2019/5/20 Application Socket API TCP UDP Network
Socket Socket在網路應用程式開發上,大致有下列兩大 類: Stream Socket 2019/5/20 Socket在網路應用程式開發上,大致有下列兩大 類: Stream Socket (Connection-Oriented Protocol)TCP Datagram Socket (connectionless Protocol)UDP
Socket API-- Server 所提供的Server端的API函式: Server BSD Socket 說明 socket 2019/5/20 所提供的Server端的API函式: Server BSD Socket 說明 socket 建立socket bind 設定socket所使用的local端IP位址與通訊埠 listen 設定socket等候(listen)Client端連結請求(connection request) accept 接受來自Client端的連結請求,並且建立socket連結 recv read (TCP)接收來自Client端所傳來的資料 recvfrom (UDP)接收來自Client端所傳來的資料 send write (TCP)傳送資料至Client端 sendto (UDP)傳送資料至Client端 closesocket 關閉通訊連結及socket,並且釋放系統資源 shutdown 關閉socket的傳送與接收的功能
Socket API-- Client 所提供的Client端的API函式: Client BSD Socket 說明 socket 2019/5/20 所提供的Client端的API函式: Client BSD Socket 說明 socket 建立socket connect 建立與Server端的socket連線 recv read (TCP)接收來自Server端所傳來的資料 recvfrom (UDP)接收來自Server端所傳來的資料 send write (TCP)傳送資料至Server端 sendto (UDP)傳送資料至Server端 closesocket 關閉通訊連結及socket,並且釋放系統資源 shutdown 關閉socket的傳送與接收的功能
UDP Socket Datagram Socket程式開發流程 Socket() Bind() Recvfrom() 2019/5/20 Datagram Socket程式開發流程 Socket() Bind() Closesocket() Sendto() Recvfrom() ( Blocking Call )
Java Socket API Java.net中支援Datagram Socket (UDP) 應用程式相關的API: Java API 2019/5/20 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 : http://nothing.tw/JDK_API_1_6/overview-summary.html
JAVA UDP Socket Java Datagram Socket DatagramSocket DatagramPacket 2019/5/20 Java Datagram Socket DatagramSocket DatagramPacket Close send receive DatagramSocket DatagramPacket Close ( Blocking Call)
使用軟體工具--Eclipse 2019/5/20 網址 : http://www.eclipse.org/downloads/
使用軟體工具--Eclipse 2019/5/20
使用軟體工具--Eclipse 2019/5/20
使用軟體工具--Eclipse 2019/5/20
使用軟體工具--Eclipse 2019/5/20
使用軟體工具--Eclipse 2019/5/20
使用軟體工具--Eclipse 2019/5/20
使用軟體工具--Eclipse 2019/5/20
使用軟體工具--Eclipse 2019/5/20
使用軟體工具--Eclipse 2019/5/20
使用軟體工具--Eclipse 2019/5/20
使用軟體工具--Eclipse 2019/5/20
使用軟體工具--Eclipse 2019/5/20
使用軟體工具--Eclipse 2019/5/20
使用軟體工具--Eclipse 2019/5/20
範例程式—UDP Server public class Server { 2019/5/20 public class Server { public static void main(String args[]) throws Exception byte buffer[]=new byte[10]; //buffer是10byte的陣列 String msg; int portNo=5555; //設port System.out.println("Server端開始接受連線請求!"); //print出的文字訊息 for (;;) { DatagramPacket packet = new DatagramPacket(buffer,buffer.length); //建立Datagram packet資料封包,限制packet值和長度大小 DatagramSocket socket=new DatagramSocket(portNo); //建立socket 需要設port socket.receive(packet); //接收封包 msg=new String(buffer,0,packet.getLength()); //將訊息轉為字串 System.out.println("收到下面的訊息 : " + msg); //print出的文字訊息 socket.close(); //關閉socket
範例程式—UDP Client 2019/5/20 public static void main(String args[]) throws Exception { int portNo =5555; //設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(); DatagramPacket packet= new DatagramPacket(buffer,oLength,addr,portNo); //訊息封包(值,大小,位址,port) DatagramSocket socket=new DatagramSocket(); //建立socket socket.send(packet); //送出packet封包訊息 socket.close(); //關閉socket
範例程式—執行結果 2019/5/20 UDP Server UDP Client