使用TCP协议写一个可以上传文件的服务器和客户端

来源:互联网 发布:快压mac版 编辑:程序博客网 时间:2024/05/01 05:21
import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintStream;import java.net.Socket;import java.util.Scanner;public class Test7_Client {    /**     * 7、使用TCP协议写一个可以上传文件的服务器和客户端。     * 分析:     * InputStreamReader字符与字节转化的桥梁     * 输出流用PrintStream 更方便     * @param args     * @throws IOException      */    public static void main(String[] args) throws IOException {        //获取需要上传的文件路径        File file = getFile();        //连接服务器 建立读写流        Socket socket = new Socket("127.0.0.1",6060);        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));        PrintStream ps = new PrintStream(socket.getOutputStream());        //将文件路径 输出 给服务器        ps.println(file.getName());        String result = br.readLine();        if ("文件已经存在!".equals(result)){         //判断服务器上是否已经有了此文件,如已存在则不用上传            System.out.println("文件已经存在,请不要重复上传!");            socket.close();            return;        }        //服务器上不存在此文件,建立输入流        FileInputStream fis = new FileInputStream(file);        byte arr[] = new byte[8192];    //高效传输        int len;        while((len = fis.read()) != -1){            ps.write(arr, 0, len);        }        fis.close();           //关流关连接        socket.close();    }    /**     * 获取上传的文件路径     * @return File     */    public static File getFile() {        Scanner sc = new Scanner(System.in);        System.out.println("输入文件路径:");        //判断要上传的文件路径是否存在        while(true){            String line = sc.nextLine();            File file = new File(line);            if(!file.exists()){                System.out.println("文件路径不存在!请重输:");            }else if (file.isDirectory()){                System.out.println("输入的是文件夹路径!请重输:");            }else{                return file;            }           }    }}
0 0
原创粉丝点击