Java Socket編程之UDP編程

更多資料請看:https://www.yuque.com/shizhiy...


Java Socket編程之UDP編程

UDP協議(用戶數據報協議)是無連接的、不可靠的、無序的,速度快
      進行數據傳輸時,首先將要傳輸的數據定義成數據報(Datagram),大小限制在64k,在數據報中指明數據索要達到的Socket(主機地址和端口號),然後再將數據報發送出去;
**
      DatagramPacket類:表示數據報包
      DatagramSocket類:進行端到端通信的類

服務器端實現步驟

  • 創建DatagramSocket,指定端口號
  • 創建DatagramPacket
  • 接受客戶端發送的數據信息
  • 讀取數據
//服務器端,實現基於UDP的用戶登錄
//1、創建服務器端DatagramSocket,指定端口
DatagramSocket socket =new datagramSocket(10010);
//2、創建數據報,用於接受客戶端發送的數據
byte[] data =newbyte[1024];//
DatagramPacket packet =newDatagramPacket(data,data.length);
//3、接受客戶端發送的數據
socket.receive(packet);//此方法在接受數據報之前會一致阻塞
//4、讀取數據
String info =newString(data,o,data.length);
System.out.println("我是服務器,客戶端告訴我"+info);


//=========================================================
//向客戶端響應數據
//1、定義客戶端的地址、端口號、數據
InetAddress address = packet.getAddress();
int port = packet.getPort();
byte[] data2 = "歡迎您!".geyBytes();
//2、創建數據報,包含響應的數據信息
DatagramPacket packet2 = new DatagramPacket(data2,data2.length,address,port);
//3、響應客戶端
socket.send(packet2);
//4、關閉資源
socket.close();

客戶端實現步驟

  • 定義發送信息
  • 創建DatagramPacket,包含將要發送的信息
  • 創建DatagramSocket
  • 發送數據
//客戶端
//1、定義服務器的地址、端口號、數據
InetAddress address =InetAddress.getByName("localhost");
int port =10010;
byte[] data ="用戶名:admin;密碼:123".getBytes();
//2、創建數據報,包含發送的數據信息
DatagramPacket packet = newDatagramPacket(data,data,length,address,port);
//3、創建DatagramSocket對象
DatagramSocket socket =newDatagramSocket();
//4、向服務器發送數據
socket.send(packet);


//接受服務器端響應數據
//======================================
//1、創建數據報,用於接受服務器端響應數據
byte[] data2 = new byte[1024];
DatagramPacket packet2 = new DatagramPacket(data2,data2.length);
//2、接受服務器響應的數據
socket.receive(packet2);
String raply = new String(data2,0,packet2.getLenth());
System.out.println("我是客戶端,服務器說:"+reply);
//4、關閉資源
socket.close();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章