java之UDP使用示例程式碼
阿新 • • 發佈:2019-02-18
一,UDP傳輸DatagramSocket和DatagramPacket:
示例程式碼:
/** * UDP傳送 * 步驟: * 1.建立UDP服務--DatagramSocket * 2.確定傳送的資料並封裝--DatagramPacket * 3.傳送資料--send * 4.關閉資源--close * @author 小蘇 * */ public class Test_UDP { public static void main(String[] args) { DatagramSocket ds = null; try { // 1.建立UDP服務 ds = new DatagramSocket(); // 2.確定傳送的資料並封裝 byte[] buff = "hello world".getBytes(); DatagramPacket dp = new DatagramPacket(buff, buff.length, InetAddress.getByName("localhost"), 10000); //3.傳送資料 ds.send(dp); } catch (Exception e) { e.printStackTrace(); }finally{ if(ds != null){ //4.關閉資源 ds.close(); } } } } /** * UDP接收 * 1.建立UDP服務,注:接收端必須指定接收埠; * 2.定義儲存資料的資料包; * 3.接收資料包; * 4.解包 * 5.關閉資源 */ class UDPRec{ public static void main(String[] args){ DatagramSocket ds = null; try { //1.建立UDP服務 ds = new DatagramSocket(10000); //2.定義儲存資料的資料包 byte[] buf = new byte[1024]; DatagramPacket p = new DatagramPacket(buf , buf.length); //3.接收資料包 ds.receive(p); //4.解包 byte[] data = p.getData(); InetAddress address = p.getAddress(); ///newString(data,0,p.getLength())注意轉換長度 System.out.println(new String(data,0,p.getLength())+"---"+address.getHostName()); } catch (Exception e) { e.printStackTrace(); }finally{ //4.關閉資源 if(ds != null){ ds.close(); } } } }
二.UDP實現簡單聊天示例程式碼:
示例程式碼:
public class Test_UDP_con { public static void main(String[] args) { UDPSend s = new UDPSend(); UDPRec_con r = new UDPRec_con(); Thread t1 = new Thread(s); Thread t2 = new Thread(r); t1.start(); t2.start(); } } /** * 傳送端 * @author 小蘇 * */ class UDPSend implements Runnable{ @Override public void run() { DatagramSocket ds = null; try { ds = new DatagramSocket(); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); while(true){ String line = reader.readLine(); //設定結束標記 if(line.equals("break")){ break; } byte[] buff = line.getBytes(); DatagramPacket dp = new DatagramPacket(buff, buff.length, InetAddress.getByName("localhost"), 10000); ds.send(dp); } } catch (Exception e) { e.printStackTrace(); }finally{ if(ds != null){ ds.close(); } } } } /** * 接收端 * @author 小蘇 * */ class UDPRec_con implements Runnable{ @Override public void run() { DatagramSocket ds = null; try { ds = new DatagramSocket(10000); byte[] buf = new byte[1024]; //迴圈接收訊息 while(true){ DatagramPacket p = new DatagramPacket(buf , buf.length); ds.receive(p); byte[] data = p.getData(); InetAddress address = p.getAddress(); System.out.println(new String(data,0,p.getLength())+"---"+address.getHostName()); } } catch (Exception e) { e.printStackTrace(); } } }