java - 使用套接字将图像从客户端发送到服务器
问题描述
我想将图像从客户端发送到 java 中的服务器。我发现一种方法是使用套接字。我的代码如下:
服务器端:线程等待客户端套接字并在客户端连接时接收图像:
@Override
public void run() {
while (running) {
try(Socket clientSocket = serverSocket.accept();
PrintWriter outText = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader intText = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
) {
try {
// Get image info
String imageInfo = inText.readLine();
BufferedImage image = ImageIO.read(ImageIO.createImageInputStream(clientSocket.getInputStream()));
// Handle input
String[] split = imageInfo.split(";");
String typeStr = split[0];
String name = split[1];
ServerImageType type = ServerImageType.fromInt(Integer.valueOf(typeStr));
// Save image
SaveImageThread saveImageThread = new SaveImageThread(image, name, type);
saveImageThread.start();
// Respond
outText.println(name + " OK");
} catch (IOException e) {
System.err.out("The server is in pain: " + e);
}
}
}
try {
serverSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
客户端:
public void sendImage(BufferedImage image, String name, ServerImageType imageType) throws IOException {
try(Socket clientSocket = new Socket(serverName, txPort);
PrintWriter outText = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader inText = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))
) {
// Send image info
String imageInfo = imageType.getId() + ";" + name;
outText.println(imageInfo);
// Send image
ImageIO.write(image, "JPG", clientSocket.getOutputStream());
// Receive acknowledgement
String input = inText.readLine();
System.out.println("Server answered: " + input);
}
}
问题:服务器卡在ImageIO.read(... line.. 有什么想法吗?
解决方案
我没有看到 clientSocket.getOutputStream().flush()。
推荐阅读
- java - Cannot use GetMethodID with byte array parameters in JNI
- libgdx - Image ClickListener 在 LibGDX 中的 JustTouched 方法之后工作
- emacs - Emacs `dired` error when renaming file using Helm: `apply` wrong number of arguments
- html - Fixed image next to scrolling text column
- sql-server - Login fails for SA sql server linux docker
- crate - CrateDB 是否有过期数据的机制?
- c# - 选中时复选框列未更新
- php - Laravel 在不使用 with 或 load 的情况下获取最近创建的相关模型
- android - Breaking For loop with Handler()
- javascript - 如何将图像字节从 javascript 发布到 JAX-RS 网络服务并从 imageBytes 数组创建 BufferedImage?