• 8.02_网络编程(客户端向服务器上传文件)


    一、客户端代码

        public class Test2_UpdateClient {

          public static void main(String[] args) throws UnknownHostException, IOException {
            // 1.提示输入要上传的文件路径, 验证路径是否存在以及是否是文件夹
              File file = getFile();
            // 2.发送文件名到服务端
              Socket socket = new Socket("127.0.0.1", 12345);
              BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
              PrintStream ps = new PrintStream(socket.getOutputStream());
              ps.println(file.getName());
            // 6.接收结果, 如果存在给予提示, 程序直接退出
              String result = br.readLine(); //读取存在后不存在的结果
              if("存在".equals(result)) {
              System.out.println("您上传的文件已经存在,请不要重复上传");
              socket.close();
              return;
            }
            // 7.如果不存在, 定义FileInputStream读取文件, 写出到网络
              FileInputStream fis = new FileInputStream(file);
              byte[] arr = new byte[8192];
                int len;

              while((len = fis.read(arr)) != -1) {
                ps.write(arr, 0, len);
                }

                fis.close();
              socket.close();
            }

            private 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;
                  }
                }
              }
          }

    二、服务器端代码

          public static void main(String[] args) throws IOException {
            //3,建立多线程的服务器
            ServerSocket server = new ServerSocket(12345);
            System.out.println("服务器启动,绑定12345端口号");

            //4.读取文件名
            while(true) {
              final Socket socket = server.accept(); //接受请求
                new Thread() {
                public void run() {
                  try {
                    InputStream is = socket.getInputStream();
                    BufferedReader br = new BufferedReader(new InputStreamReader(is));
                    PrintStream ps = new PrintStream(socket.getOutputStream());
                    String fileName = br.readLine();

                    //5.判断文件是否存在, 将结果发回客户端
                    File dir = new File("update");
                    dir.mkdir(); //创建文件夹
                    File file = new File(dir,fileName); //封装成File对象

                    if(file.exists()) { //如果服务器已经存在这个文件
                      ps.println("存在"); //将存在写给客户端
                      socket.close(); //关闭socket
                      return;
                      }else {
                          ps.println("不存在");
                      }

                  //8.定义FileOutputStream, 从网络读取数据, 存储到本地
                  FileOutputStream fos = new FileOutputStream(file);
                  byte[] arr = new byte[8192];
                  int len;

                  while((len = is.read(arr)) != -1) {
                    fos.write(arr, 0, len);
                    }

                    fos.close();
                    socket.close();
                    } catch (IOException e) {

                      e.printStackTrace();
                    }
                  }
                }.start();
            }



          }
        }

  • 相关阅读:
    Asp.net 基础4(自定义控件的使用之客户端脚本生成)
    Asp.net 基础3(自定义控件的使用)
    wpf 可以取消的单选checkbox
    wpf MaskedTextBox
    自定义 日期格式的datePicker
    wpf datagrid no record found style
    Sql语句绝妙用法
    .net反射简介
    c# 正则表达式小结
    如何获取地址栏地址
  • 原文地址:https://www.cnblogs.com/zyyzy/p/12434460.html
Copyright © 2020-2023  润新知