java使用Socket实现TCP协议的文本文件从一个路径上传到服务器在从服务器下载到另一个路径,将服务器端,上传客户端,下载客户端代码全写出来
时间: 2024-10-19 12:05:47 浏览: 9
在Java中,我们可以使用Socket API来实现基于TCP协议的文件传输,这里我会提供一个简单的示例,包括服务器端、上传客户端和下载客户端的代码。首先,我们需要导入`java.io`和`java.net`包。
**服务器端 (Server.java)**
```java
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
private static final int PORT = 9000; // 服务器监听的端口
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(PORT);
System.out.println("Server started on port " + PORT);
while (true) {
Socket clientSocket = serverSocket.accept();
handleClient(clientSocket);
}
}
private static void handleClient(Socket socket) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
String fileName = in.readLine(); // 接收文件名
File fileToServe = new File("/path/to/server/files/" + fileName); // 假设文件存在此路径
if (fileToServe.exists()) { // 检查文件是否存在
byte[] fileBytes = Files.readAllBytes(fileToServe.toPath());
out.println("File received and ready to download");
out.write(fileBytes);
out.flush();
out.close();
socket.close();
} else {
out.println("File not found on server");
socket.close();
}
}
}
```
**上传客户端 (Uploader.java)**
```java
import java.io.*;
import java.net.Socket;
public class Uploader {
private static final String SERVER_ADDRESS = "localhost"; // 服务器地址
private static final int SERVER_PORT = 9000;
public static void main(String[] args) throws IOException {
Socket socket = new Socket(SERVER_ADDRESS, SERVER_PORT);
OutputStream outputStream = socket.getOutputStream();
// 假设你要上传的文件名为"test.txt"
String fileName = "test.txt";
File fileToUpload = new File("/path/to/client/file/" + fileName);
FileInputStream fis = new FileInputStream(fileToUpload);
byte[] bytes = new byte[(int) fileToUpload.length()];
fis.read(bytes);
outputStream.write(fileName.getBytes()); // 发送文件名
outputStream.write("\n".getBytes()); // 隔行符
outputStream.write(bytes); // 传送文件内容
outputStream.flush();
fis.close();
outputStream.close();
socket.close();
}
}
```
**下载客户端 (Downloader.java)**
```java
import java.io.*;
import java.net.Socket;
public class Downloader {
private static final String SERVER_ADDRESS = "localhost"; // 服务器地址
private static final int SERVER_PORT = 9000;
public static void main(String[] args) throws IOException {
Socket socket = new Socket(SERVER_ADDRESS, SERVER_PORT);
InputStream inputStream = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String fileName = reader.readLine(); // 获取文件名
File outputFile = new File("/path/to/downloaded/file/" + fileName);
FileOutputStream fos = new FileOutputStream(outputFile);
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
fos.write(buffer, 0, bytesRead);
}
fos.close();
reader.close();
socket.close();
System.out.println("Download complete: " + outputFile.getAbsolutePath());
}
}
```
阅读全文