实现客户端
在这一步中,你将学习如何实现客户端,以便将图像上传到服务器。
在代码编辑器中打开 org/labex/client/UploadClient.java
文件。
在 main()
方法中,创建一个 Socket
对象,用于连接到服务器 127.0.0.1:10203
:
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
try (
// Socket:客户端通信组件
// 读取本地图像 => 通过输出流发送到服务器
// OutputStream:将本地图像文件流发送到服务器
// BufferedInputStream:读取本地图像
Socket client = new Socket("127.0.0.1", 10203);
OutputStream out = client.getOutputStream();
BufferedInputStream in = new BufferedInputStream(new FileInputStream(
"/home/labex/project/timg.jpg"))
) {
// 每次读取1024字节
byte[] buffer = new byte[1024];
int length = -1;
while ((length = in.read(buffer))!= -1) {
// 通过输出流将读取的内容发送到服务器
out.write(buffer, 0, length);
}
// 暂时结束“输出”(Socket未关闭)
client.shutdownOutput();
// 读取服务器的反馈
try (BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()))) {
String reply = reader.readLine();
System.out.println(reply);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
客户端将读取本地图像文件 /home/labex/project/timg.jpg
,并使用套接字的输出流将其发送到服务器。
发送图像后,客户端将读取服务器的反馈消息并打印到控制台。
如果服务器发送 “接收完成” 消息,则表示图像上传成功。
现在,你已经完成了服务器和客户端的实现。你可以编译并运行程序来测试图像上传功能。
运行
打开一个终端并运行以下命令来编译你的客户端和服务器程序:
javac org/labex/client/UploadClient.java
javac org/labex/service/UploadService.java
启动服务器以监听客户端:
java org.labex.service.UploadService
打开另一个终端以启动客户端上传图像,你将得到提示:“接收完成”
java org.labex.client.UploadClient
检查 pic
文件夹中是否包含该图像:
ls pic
运行效果如下: