Java计算机三级编程题

2.4.1 TCP客户端与服务器端传输文件

题目要求

(1)分别创建名为UploadTCPServer 服务器端程序和 UploadTCPClient 客户端程序。

(2)编写服务器端程序 UploadTCPServer,要求实现:
1 创建 Socket 对象,连接当前服务器的 IP地址和端口号 10001。
2 调用 accept()方法持续接收客户端请求
3 针对每一个客户端请求创建一个线程进行连接管理,
4 在run()函数里处理客户端请求产进行上传文件保存
5 创建图片上传保存目录为D:\upload\目录下
6 通过客户端输入流读取上传图片写入到指定目录里的
7 服务器端向客户端做出相应,返回“上传成功”信息的
8 关闭流和Socket 连接

(3)编写客户端程序 UploadTCPClient,要求实现:
1 创建 Socket 对象,连接到指定的服务器端
2 通过输出流向服务器上传文件,并显示“显示到服务器端,开始文
件上传!”
3 图片上传完成后,关闭客户端输出流
4 客户端接收服务器端的相应信息“上传成功“并输出
3 关闭流和 Socket 连接

(4)在桌面新建的一个文件夹中,文件夹命名为“准考证号+考位号+2.4",请将
UploadTCPServer 和 UploadTCPClient 文件储存在此文件夹

编码

服务器端:

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class UploadTCPServer {
	//	编写服务器端程序 UploadTCPServer,要求实现:
	public static void main(String[] args) {
		// 1、创建 Socket 对象,连接当前服务器的 IP地址和端口号 10001。
		try {
			ServerSocket serverSocket = new ServerSocket(10001);
			while (true) {
				// ServerSocket.accept返回的是socket类型的
				// ServerSocket理解为中心?
				// 2、调用 accept()方法持续接收客户端请求
				Socket socket = serverSocket.accept();
				// 3、针对每一个客户端请求创建一个线程进行连接管理
				new Thread(new ClientHandler(socket)).start();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

// 新创的线程类
class ClientHandler implements Runnable {

	private Socket socket;

	public ClientHandler(Socket socket) {
		this.socket = socket;
	}

	// 4、在run()函数里处理客户端请求产进行上传文件保存
	@Override
	public void run() {
		try {
			// 5、创建图片上传保存目录为D:\\upload\目录下
			File directory = new File("D:\\upload");
			if (!directory.exists()) {
				// mkdirs()方法会创建所有不存在的父文件夹,如果父文件夹已经存在,就不会再创建了。
				// mkdir()方法只会创建指定的文件夹,如果父文件夹不存在,就会抛出异常。
				directory.mkdirs();
			}
			// 6、通过客户端输入流读取上传图片写入到指定目录里
			InputStream inputStream = socket.getInputStream(); // 客户端输入流
			FileOutputStream fileOutputStream = new FileOutputStream("D:\\upload\\bird.jpg"); // 具体题目中指定目录

			// 缓冲区,用于临时存储从输入流中读取的数据
			byte[] bytes = new byte[1024];
			int byteRead; // 当前缓冲区读取到的长度
			// 从socket客户端输入流中循环读取
			while ((byteRead = inputStream.read(bytes)) != -1) {
				fileOutputStream.write(bytes, 0, byteRead);
			}

			// 关闭输出
			fileOutputStream.close();
			// 7、服务器端向客户端做出相应,返回“上传成功”信息的
			OutputStream outputStream = socket.getOutputStream();
			outputStream.write("上传成功".getBytes());
			// 刷进去socket里的流中
			outputStream.flush();

			// 8、关闭流和Socket连接
			outputStream.close();
			inputStream.close();
			socket.close();
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}
}

客户端:

import java.io.*;
import java.net.Socket;

public class UploadTCPClient {
	public static void main(String[] args) {
		// 编写客户端程序 UploadTCPClient,要求实现:
		try {
			// 1、创建Socket对象,连接到指定的服务器端
			Socket socket = new Socket("localhost", 10001);
			// 2、通过输出流向服务器上传文件,并显示“显示到服务器端,开始文件上传!”
			System.out.println("连接到服务器端,开始文件上传");
			File file = new File("D:\\bird.jpg");
			FileInputStream fileInputStream = new FileInputStream(file);
			// 获取socket的输出,将文件发送到服务器
			OutputStream outputStream = socket.getOutputStream();
			byte[] bytes = new byte[1024];
			int byteRead = 0;
			while ((byteRead = fileInputStream.read(bytes)) != -1) {
				outputStream.write(bytes, 0, byteRead);
			}
			// 3、图片上传完成后,关闭客户端输出流
			// 数据发送完毕,通知服务器已经结束文件传输
			socket.shutdownOutput();
			fileInputStream.close();
			// 4、客户端接收服务器端的响应信息“上传成功“并输出
			InputStrea
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

-R00kie-

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

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

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

打赏作者

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

抵扣说明:

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

余额充值