Test_Java_网络编程(模拟客户端向服务器上传文件)

需求:使用Java程序创建两个类,分别为UpdateClient和UpdateServer类来模拟客户端向服务器上传文件(因为没有服务器,只能本机传给自己)

  1. 提示输入要上传的文件路径,验证路径是否在以及是否是文件夹
  2. 发送文件名到服务器
  3. 建立多线程的服务器
  4. 读取文件名
  5. 判断文件是否存在,将结果发回客户端
  6. 定义FileOutputStream,从网络读取数据,存储到本地

Test2_UpdateClient.java

package com.soar.test;

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.net.UnknownHostException;
import java.util.Scanner;

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();
        //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;
            }
        }
    }

}

Test2_UpdateServer.java

package com.soar.test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Test2_UpdateServer {

    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();
        }
    }

}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值