JAVA网络练习

本文介绍了一个简单的Java实现,模拟客户端向服务器上传文件的过程。首先,客户端验证文件路径,然后发送文件名到服务器。服务器通过多线程处理请求,检查文件是否存在,若存在则通知客户端终止,否则接收文件数据并保存到本地。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单模拟客户端向服务器上传文件---这里就用本机模拟

分析:

 

步骤:1.客户端:提示输入要上传的文件路径,验证路径是否粗壮乃以及是否是文件夹,如果是文件路径就继续

 

  2.客户端:发送文件名字到服务器

  3.服务器:建立多线程服务器

  4.服务器:读取文件名

  5.服务器:判断文件是否在服务器上已经存在,如果存在告诉客户端存在,并终止程序;不存在就继续

  6.客户端:接受服务器返回来的判断文件的结果,如果存在,就给予提示并推出程序;如果不存在,就定义字节输入 流将文件读取,然后再写出到网络中

  7.服务器:从网络中读取数据,定义字节输出流,将从网络读取的数据写到本地

服务器端的代码:

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 Demo06_Server {

	public static void main(String[] args) throws IOException {
		ServerSocket server = new ServerSocket(12345);	
		System.out.println("服务器启动,绑定12345端口");
		//读取文件名
		while(true) {
			final Socket socket = server.accept();		//服务器接受请求
			new Thread() {								//多线程服务器,接受请求后就开启一条线程
				@Override
				public void run() {
					try {
						InputStream is = socket.getInputStream();
						BufferedReader bf = new BufferedReader(new InputStreamReader(is));
						PrintStream  ps = new PrintStream(socket.getOutputStream());
						String fileName = bf.readLine();
						//判断文件是否存在
						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("不存在");
						}
						
						//定义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();
			
		}
		
			
	}

}

客户端部分的代码

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 Demo06_Client {

	public static void main(String[] args) throws UnknownHostException, IOException {
		//提示输入要上传的文件路径,验证路径是否存在并且是否是文件夹
		File file = getFiel();
		//发送文件到服务器
		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());
		//接受返回的结果,如果存在,给与提示并退出程序;如果不存在,读取文件,写出到网络
		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(arr))!=-1) {
			ps.write(arr, 0, len);
		}
		
		fis.close();
		socket.close();
		
	}

	private static File getFiel() {
		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("你输入的是一个文件夹路径,不是文件,请重i性能输入");
			}else {
				return file;
			}
		}
		
	}

}

 

 

  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值