java程序设计一个服务器完成文件下载功能?
以下是一个简单的Java程序示例,用于设计一个基于TCP协议的文件下载服务器:
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class FileServer {
public static void main(String[] args) {
try {
// 创建服务器套接字,监听指定端口
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务器已启动,等待客户端连接...");
while (true) {
// 接受客户端连接
Socket clientSocket = serverSocket.accept();
System.out.println("客户端连接成功:" + clientSocket.getInetAddress().getHostAddress());
// 创建输入流,读取客户端请求的文件名
BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String fileName = reader.readLine();
System.out.println("客户端请求下载文件:" + fileName);
// 创建文件输入流,读取文件内容
File file = new File(fileName);
FileInputStream fileInputStream = new FileInputStream(file);
// 创建输出流,发送文件内容给客户端
OutputStream outputStream = clientSocket.getOutputStream();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fileInputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
System.out.println("文件发送完成");
// 关闭流和套接字
fileInputStream.close();
outputStream.close();
reader.close();
clientSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端可以使用java.net.Socket类来连接服务器并下载文件。以下是一个简单的Java程序示例:
import java.io.*;
import java.net.Socket;
public class FileClient {
public static void main(String[] args) {
try {
// 创建客户端套接字,连接服务器
Socket socket = new Socket("localhost", 8888);
// 创建输出流,发送文件名给服务器
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
writer.write("example.txt");
writer.newLine();
writer.flush();
// 创建文件输出流,接收服务器发送的文件内容
FileOutputStream fileOutputStream = new FileOutputStream("downloadedFile.txt");
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, bytesRead);
}
System.out.println("文件下载完成");
// 关闭流和套接字
fileOutputStream.close();
writer.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
请注意,这只是一个简单的示例,没有进行错误处理和并发处理。在实际应用中,可能需要更复杂的逻辑来处理多个客户端请求和错误情况
原文地址: http://www.cveoy.top/t/topic/iGJ2 著作权归作者所有。请勿转载和采集!