帮我编写一个java程序,模拟网站下载图片的功能,先让客户端给服务器发请求,告诉服务器要下载的文件名,然后服务器就给客户端传递文件,直至传递完成; **要求:** 1:服务器使用线程池完成,每次客户请求下载文件时,就使用一个线程与客户端交互; 2:要求客户端保存文件时文件名使用UUID随机生成;
时间: 2023-05-17 11:05:14 浏览: 47
好的,我可以为您编写一个Java程序,模拟网站下载图片的功能。以下是程序的基本流程:
1. 客户端向服务器发送下载请求,请求下载指定文件名的图片。
2. 服务器接收到请求后,使用线程池创建一个线程与客户端进行交互。
3. 服务器读取指定文件名的图片,并将其传递给客户端。
4. 客户端接收到图片后,使用UUID随机生成一个文件名,并将图片保存到本地。
以下是程序的代码:
Server.java
```java
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Server {
private static final int PORT = 8888;
private static final int THREAD_POOL_SIZE = 10;
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(THREAD_POOL_SIZE);
try (ServerSocket serverSocket = new ServerSocket(PORT)) {
System.out.println("Server started on port " + PORT);
while (true) {
Socket clientSocket = serverSocket.accept();
executorService.execute(new ClientHandler(clientSocket));
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static class ClientHandler implements Runnable {
private final Socket clientSocket;
public ClientHandler(Socket clientSocket) {
this.clientSocket = clientSocket;
}
@Override
public void run() {
try (BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
OutputStream out = clientSocket.getOutputStream()) {
String fileName = in.readLine();
File file = new File(fileName);
if (!file.exists()) {
out.write("File not found".getBytes());
return;
}
try (FileInputStream fileInputStream = new FileInputStream(file)) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fileInputStream.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
```
Client.java
```java
import java.io.*;
import java.net.Socket;
import java.util.UUID;
public class Client {
private static final String SERVER_ADDRESS = "localhost";
private static final int SERVER_PORT = 8888;
public static void main(String[] args) {
try (Socket socket = new Socket(SERVER_ADDRESS, SERVER_PORT);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
FileOutputStream fileOutputStream = new FileOutputStream(UUID.randomUUID().toString() + ".jpg")) {
String fileName = "image.jpg";
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println(fileName);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = socket.getInputStream().read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, bytesRead);
}
System.out.println("File downloaded successfully");
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
请注意,此程序仅用于演示目的,实际应用中可能需要进行更多的错误处理和安全检查。