首页 > 代码库 > 自己用java实现飞鸽传书 2 - 实现文件传输
自己用java实现飞鸽传书 2 - 实现文件传输
第二步:实现文件传递。
上一步只是从服务端传递了一个字符串到客户端,这次需要对代码进行调整,实现从服务端获取文件,在客户端将文件存入目标地址。
调整后的代码:
服务端:
import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.net.ServerSocket;import java.net.Socket;public class Server { public static void main(String[] args){ //创建服务端socket,用以网络信息的接收 ServerSocket serverSocket = null; try { //服务端socket使用本地IP,端口号使用36000 serverSocket = new ServerSocket(36000); //保证服务端持续运行 while(true){ //接收网络信息,未接收到则阻塞当前线程 Socket socket = serverSocket.accept(); //将文件信息写入socket通信 writeFile(socket); //关闭socket,防止客户端长时间等待 socket.close(); } } catch (Exception e) { e.printStackTrace(); } } /** * 将文件信息写入socket通信流 * @param socket * socket */ private static void writeFile(Socket socket){ try{ //获取本地文件 String filePath ="D:/test.pdf"; //创建文件对象 File file = new File(filePath); //使用DataOutputStream传送文件信息 DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); //写入文件名 dos.writeUTF(file.getName()); //写入文件大小 dos.writeLong(file.length()); //清空缓冲区 dos.flush(); //使用DataInputStream将文件写入 DataInputStream dis = new DataInputStream( new FileInputStream(file) ); byte[] buffer = new byte[1024]; int head = 0; while((head=dis.read(buffer)) > 0){ dos.write(buffer, 0, head); } dis.close(); dos.close(); }catch(Exception e){ e.printStackTrace(); } }}
客户端:
import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.FileOutputStream;import java.net.Socket;public class Client { public static void main(String[] args){ DataInputStream input = null; Socket clientSocket = null; try { //创建客户端socket,用以连接服务端 clientSocket = new Socket("127.0.0.1", 36000); //读取服务端发送的信息流 input = new DataInputStream(clientSocket.getInputStream()); String fileName = input.readUTF(); long fileSize = input.readLong(); System.out.println("收到服务端发过来的文件,文件名称为:" + fileName + ",文件大小为:" + fileSize); //将文件读入本地 String savePath = "E:\\just a test.pdf"; DataOutputStream fos = new DataOutputStream(new FileOutputStream(savePath)); byte[] buffer = new byte[1024]; int head = 0; while((head=input.read(buffer)) > 0){ fos.write(buffer, 0, head); } fos.close(); input.close(); clientSocket.close(); } catch (Exception e) { e.printStackTrace(); } }}
本次文件流的传送使用了DataOutputStream和DataInputStream,使用Data类型的字节流可以根据信息类型分别进行处理。
自己用java实现飞鸽传书 2 - 实现文件传输
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。