zoukankan      html  css  js  c++  java
  • 自己用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类型的字节流可以根据信息类型分别进行处理。

  • 相关阅读:
    MyImages
    【优惠&正版】超级硬盘数据恢复软件(SuperRecovery)7.1正版注册码(39元一机终身授权,支持最新版)
    【2020年4月24日】TTradmin v2.3.2 简单好用的临时远程协助软件
    Radmin Center 1.54 测试版
    VS2015 编译原版 tightvnc 2.8.27 源码
    Centos 安装 Go 编译环境
    GHO文件安装到Vmware的两种姿势
    Radmin Server v3.5.2.1 汉化破解绿色版,完整版+精简版【20190505更新】
    系统服务监视、系统服务守护 ServiceMonitor
    API Monitor v2.0 Alpha-r13 (32+64) 汉化版
  • 原文地址:https://www.cnblogs.com/amunote/p/4138059.html
Copyright © 2011-2022 走看看