TCP 文件上传案例

文件上传案例分析图解:
在这里插入图片描述

服务器端:读取客户端上传的文件,保存到服务器的硬盘,给客户端回写“上传成功”

 明确:
	数据源:客户端上传的文件
	目的地:服务器的硬盘

实现步骤:

1.创建一个服务器ServerSocket对象,和系统要指定的端口号
2.使用ServerSocket对象中的方法accept,获取到请求的客户端Socket对象
3.使用Socket对象中的方法getInputStream,获取到网络字节输入流InputStream对象
4.判断H:\\upload文件夹是否存在,不存在则创建
5.创建一个本地字节输出流FileOutputStream对象,构造方法中绑定要输出的目的地
6.使用网络字节输入流InputStream对象中的方法read,读取客户端上传的文件
7.使用本地字节输出流FileOutputStream对象中的方法write,把读取到的文件保存到服务器的硬盘上
8.使用Socket对象中的方法getOutputStream,获取到网络字节输出流OutputStream对象
9.使用网络字节输出流OutputStream对象中的方法write,给客户端回写“上传成功”
10.释放资源

代码如下:

public class FileUploadTCPServer {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//1.创建一个服务器ServerSocket对象,和系统要指定的端口号
		ServerSocket server=new ServerSocket(9999);
	 	//2.使用ServerSocket对象中的方法accept,获取到请求的客户端Socket对象
		Socket socket=server.accept();
				
	 	//3.使用Socket对象中的方法getInputStream,获取到网络字节输入流InputStream对象
		InputStream is=socket.getInputStream();
	 	//4.判断H:\\upload文件夹是否存在,不存在则创建
		File file=new File("H:\\upload");
		if(!file.exists()) {
			file.mkdirs();
		}
	 	//5.创建一个本地字节输出流FileOutputStream对象,构造方法中绑定要输出的目的地
		FileOutputStream fos=new FileOutputStream(file+"\\lyu.jpg");
	 	//6.使用网络字节输入流InputStream对象中的方法read,读取客户端上传的文件
		int len=0;
		byte[] bytes=new byte[1024];
		while((len=is.read(bytes))!=-1) {
			//7.使用本地字节输出流FileOutputStream对象中的方法write,把读取到的文件保存到服务器的硬盘上
			fos.write(bytes,0,len);
		}
	 	
	 	//8.使用Socket对象中的方法getOutputStream,获取到网络字节输出流OutputStream对象
		OutputStream os=socket.getOutputStream();
	 	//9.使用网络字节输出流OutputStream对象中的方法write,给客户端回写“上传成功”
		
		os.write("Success".getBytes());
	 	//10.释放资源
		fos.close();
		socket.close();
		server.close();

	}

}

***客户端:***读取本地文件,上传到服务器,读取服务器回写的数据

明确:
	数据源:
	目的地:

实现步骤:

	1.创建一个本地字节输入流FileInputStream对象,构造方法中绑定要读取的数据源
	2.创建一个客户端Socket对象,构造方法中绑定服务器的IP地址和端口号
	3.使用Socket中的方法getOutputStream,获取网络字节输出流OutputStream对象
	4.使用本地字节输入流FileInputStream对象中的方法read,读取本地文件
	5.使用网络字节输入流OutputStream对象中的方法write,把读取到的文件上传到服务器
	6.使用Socket中的方法getInputStream,获取网络字节输入流InputStream对象
	7.使用网络字节输入流InputStream对象中的方法read读写服务器回写数据
	8.释放资源

代码如下:

public class FileUploadeTCPClient {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//1.创建一个本地字节输入流FileInputStream对象,构造方法中绑定要读取的数据源
		FileInputStream fis=new FileInputStream("C:\\Users\\DELL\\Desktop\\lyu.jpg");
		//2.创建一个客户端Socket对象,构造方法中绑定服务器的IP地址和端口号
		Socket socket=new Socket("127.0.0.1",9999);
		//3.使用Socket中的方法getOutputStream,获取网络字节输出流OutputStream对象
		OutputStream os=socket.getOutputStream();
		//4.使用本地字节输入流FileInputStream对象中的方法read,读取本地文件
		int len=0;
		byte[] bytes=new byte[1024];
		while((len=fis.read(bytes))!=-1) {
			//5.使用网络字节输入流OutputStream对象中的方法write,把读取到的文件上传到服务器
			os.write(bytes,0,len);
		}
		//解决上传文件,给服务器写一个结束标记
		/*
		 	void shutdownOutput() 禁用次套接字的输出流
		 	对于TCP套接字,任何以前写的数据都将被发送,并且后跟TCP的正常连接终止序列
		 */
		socket.shutdownOutput();
		//6.使用Socket中的方法getInputStream,获取网络字节输入流InputStream对象
		InputStream is=socket.getInputStream();
		//7.使用网络字节输入流InputStream对象中的方法read读写服务器回写数据
		while((len=is.read(bytes))!=-1) {
			System.out.println((char)len);
		}
		//8.释放资源
		fis.close();
		socket.close();

	}

}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZeroBase.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值