设计一个基于TCP的文件上传功能,将文件从客户端上传到指定服务器。 进阶设计:文件传输完成后服务器给客户端发送“文件上传成功”的信息。java代码
时间: 2024-03-09 15:49:34 浏览: 17
好的,下面给出一个基于Java的简单实现,仅供参考。
客户端代码:
```java
import java.io.*;
import java.net.Socket;
public class FileUploader {
private static final String SERVER_IP = "127.0.0.1";
private static final int SERVER_PORT = 8888;
private static final int BUFFER_SIZE = 1024;
public static void main(String[] args) {
Socket socket = null;
FileInputStream fileInputStream = null;
DataOutputStream dataOutputStream = null;
DataInputStream dataInputStream = null;
try {
// 创建Socket连接
socket = new Socket(SERVER_IP, SERVER_PORT);
System.out.println("Connected to server");
// 获取文件信息
File file = new File("path/to/file");
String fileName = file.getName();
long fileSize = file.length();
int bufferSize = BUFFER_SIZE;
// 发送文件信息
dataOutputStream = new DataOutputStream(socket.getOutputStream());
dataOutputStream.writeUTF(fileName);
dataOutputStream.writeLong(fileSize);
dataOutputStream.writeInt(bufferSize);
// 发送文件数据
fileInputStream = new FileInputStream(file);
byte[] buffer = new byte[bufferSize];
int readLength;
while ((readLength = fileInputStream.read(buffer)) != -1) {
dataOutputStream.write(buffer, 0, readLength);
dataOutputStream.flush();
}
// 等待服务器返回上传结果
dataInputStream = new DataInputStream(socket.getInputStream());
String result = dataInputStream.readUTF();
System.out.println("Upload result: " + result);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fileInputStream != null) {
fileInputStream.close();
}
if (dataOutputStream != null) {
dataOutputStream.close();
}
if (dataInputStream != null) {
dataInputStream.close();
}
if (socket != null) {
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
```
服务器端代码:
```java
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class FileReceiver {
private static final int SERVER_PORT = 8888;
private static final int BUFFER_SIZE = 1024;
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
FileOutputStream fileOutputStream = null;
DataInputStream dataInputStream = null;
DataOutputStream dataOutputStream = null;
try {
// 创建ServerSocket
serverSocket = new ServerSocket(SERVER_PORT);
System.out.println("Server started");
// 等待客户端连接
socket = serverSocket.accept();
System.out.println("Client connected");
// 接收文件信息
dataInputStream = new DataInputStream(socket.getInputStream());
String fileName = dataInputStream.readUTF();
long fileSize = dataInputStream.readLong();
int bufferSize = dataInputStream.readInt();
// 创建文件输出流
fileOutputStream = new FileOutputStream("path/to/save/" + fileName);
// 接收文件数据
byte[] buffer = new byte[bufferSize];
int readLength;
while ((readLength = dataInputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, readLength);
fileOutputStream.flush();
}
// 发送上传结果
dataOutputStream = new DataOutputStream(socket.getOutputStream());
dataOutputStream.writeUTF("Upload success");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fileOutputStream != null) {
fileOutputStream.close();
}
if (dataInputStream != null) {
dataInputStream.close();
}
if (dataOutputStream != null) {
dataOutputStream.close();
}
if (socket != null) {
socket.close();
}
if (serverSocket != null) {
serverSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
```
以上代码仅供参考,实际应用中需要根据具体需求进行修改和完善。