java socket客户端服务端可互相发送图片,另外一端回馈“已收到”(要求根据上述要求给出客户端和服务端两个端口各自的完整可运行完整代码)
时间: 2024-11-15 19:23:58 浏览: 20
在Java中,通过Socket API可以实现实时的图像传输。下面是一个简单的例子,展示了如何创建一个TCP服务器和客户端,用于接收和发送图片。这里我们使用`java.awt.image.BufferedImage`来处理图片,并使用`ObjectOutputStream`和`ObjectInputStream`来序列化和反序列化图片。
**服务端(Server.java)**:
```java
import java.io.*;
import java.net.*;
public class Server {
private static final int PORT = 8000; // 服务器监听的端口
public static void main(String[] args) throws IOException {
try (ServerSocket serverSocket = new ServerSocket(PORT);
ObjectOutputStream output = new ObjectOutputStream(serverSocket.getOutputStream())) {
System.out.println("Server started on port " + PORT);
Socket clientSocket = serverSocket.accept();
System.out.println("Accepted connection from client");
InputStream inputStream = clientSocket.getInputStream();
ObjectInputStream input = new ObjectInputStream(inputStream);
while (true) {
BufferedImage image = (BufferedImage) input.readObject();
if (image == null) { // 结束标志,通常客户端发送null表示关闭连接
break;
}
// 图片已接收,反馈给客户端
output.writeObject("Received image");
output.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
**客户端(Client.java)**:
```java
import java.io.*;
import java.net.*;
public class Client {
private static final String SERVER_HOST = "localhost"; // 服务器地址,改为实际主机名或IP
private static final int PORT = 8000;
public static void main(String[] args) throws IOException {
try (Socket socket = new Socket(SERVER_HOST, PORT);
ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream());
BufferedInputStream in = new BufferedInputStream(socket.getInputStream())) {
System.out.println("Connecting to server...");
// 发送图片(这里是读取本地文件示例,你需要替换为实际图片路径)
BufferedImage image = ImageIO.read(new File("path_to_your_image.jpg"));
output.writeObject(image);
output.flush();
// 接收并打印反馈
String feedback = (String) new ObjectInputStream(in).readObject();
System.out.println("Feedback received: " + feedback);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
```
注意:为了简化示例,这里假设图片文件存在并且可以直接读取。在实际应用中,你可能需要对图片文件路径、错误处理等进行适当调整。同时,这个例子没有包含断线后的异常处理以及关闭资源的finally块,确保在生产环境中使用时添加这些部分。
阅读全文