接收端
package com.zy.demo2; import java.io.File; import java.io.FileOutputStream; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class UDPReceive { public static void main(String[] args) throws Exception { //1創建碼頭 DatagramSocket datagramSocket = new DatagramSocket(9999);//雙方約定的 //2創建集裝箱 // byte b[]=new byte[1024];//空的字節數組 // DatagramPacket datagramPacket = new DatagramPacket(b, b.length); // // // //3收貨 // datagramSocket.receive(datagramPacket);//線程阻塞!!!(沒收到時) //----------------------------- byte[] aa = new byte[1]; FileOutputStream fileOutputStream = new FileOutputStream(new File("E:\\接收的文件\\1.png")); do { DatagramPacket datagramPacket = new DatagramPacket(aa, 0, aa.length); if(datagramPacket.getLength()!=1){ break; } datagramSocket.receive(datagramPacket); System.out.println(datagramPacket.getLength()); fileOutputStream.write(datagramPacket.getData()); } while (true); System.out.println("接收完成"); //--------------------------------------- //4查看貨物 // System.out.println(new String(b)); //5釋放資源 datagramSocket.close(); } }
發送端
package com.zy.demo2; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.UnknownHostException; public class UDPSend { public static void main(String[] args) throws Exception { //1創建碼頭 DatagramSocket datagramSocket = new DatagramSocket(); //2創建集裝箱 // String data="中國食用油"; // byte[] bytes = data.getBytes(); //3發送數據 //根據名字獲取主機(機器互聯) InetAddress byName = InetAddress.getByName("192.168.219.61");//getByName("127.0.0.1")也可以寫ip,不一定非得是主機名 // DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, byName, 9999); // datagramSocket.send(datagramPacket); byte bb[]=new byte[1];//udp容易丟包,為了降低損失,字節數組調整小些 FileInputStream fileInputStream = new FileInputStream(new File("E:\\13.png")); int read = fileInputStream.read(bb); while(read!=-1){ DatagramPacket datagramPacket = new DatagramPacket(bb, bb.length, byName, 9999); datagramSocket.send(datagramPacket); read = fileInputStream.read(bb); } //4釋放資源 datagramSocket.close(); } }
程序一個bug:接收端接收完數據時JVM還在運行着,找不到合適的方法讓退出JVM