要求:
基于UDP协议实现文件下载发送方–请求–接收方发送文件–发送方接收文件
代码:
发送方:
package Homework1; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.UnknownHostException; public class Send { public static void main(String[] args){ System.out.println("发送者启动"); DatagramSocket socket=null; FileOutputStream fos=null; try { //1.发送请求 socket=new DatagramSocket(); String string="请求下载文件..."; DatagramPacket packet=new DatagramPacket(string.getBytes(), string.getBytes().length, InetAddress.getLocalHost(), 6635); socket.send(packet); //2.创建file对象,以及文件输出流 File file=new File("b.txt"); fos=new FileOutputStream(file); //3.接收文件 byte[] buf=new byte[1024]; while(true){ DatagramPacket p=new DatagramPacket(buf, buf.length); socket.receive(p); String string2=new String(p.getData(), 0, p.getLength()); //4.根据接收方发来的数据,判断文件是否传输完毕 if(string2.equals("发送完毕")){ break; } fos.write(string2.getBytes()); fos.flush(); } } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { if(socket!=null){ socket.close(); } if(fos!=null){ try { fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }接收方:
package Homework1; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class Receive { public static void main(String[] args){ System.out.println("接收者启动"); DatagramSocket socket=null; FileInputStream fis=null; try { //1.创建Datagramsocket对象,相当于TCP中的Socket socket=new DatagramSocket(6635); //2.创建Datagrampacket对象,用于装数据 byte[] buf=new byte[1024]; DatagramPacket packet=new DatagramPacket(buf, buf.length); //3.接收数据,收到发送方请求“下载文件” socket.receive(packet); System.out.println(new String(packet.getData(),0,packet.getLength())); //4.发送文件给--发送方 File file=new File("a.txt");//要给发送方的文件 fis=new FileInputStream(file); byte[] b=new byte[10]; int count=0; while((count=fis.read(b))!=-1){ DatagramPacket p=new DatagramPacket(b, count,packet.getAddress(),packet.getPort()); socket.send(p); } //5.文件发送完后,给--发送方回复一句话 String string="发送完毕"; packet=new DatagramPacket(string.getBytes(), string.getBytes().length,packet.getAddress(),packet.getPort()); socket.send(packet); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { if(socket!=null){ socket.close(); } if(fis!=null){ try { fis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }运行结果: 发送方:
接收方: