使用Socket编程实现文件传输主要分为以下步骤:
- 服务端监听指定端口,等待客户端连接。
- 客户端连接服务端,发送要传输的文件的名称和大小。
- 服务端接收文件名和大小信息,准备接收文件数据。
- 客户端读取文件内容,分批发送给服务端。
- 服务端接收文件数据,写入到本地文件中。
- 客户端发送文件传输结束标识。服务端接收到结束标识,文件传输完成。
- 服务端回复客户端传输成功信息。客户端接收成功信息,断开连接。
代码示例:
// 服务端
ServerSocket server = new ServerSocket(8000);
Socket socket = server.accept();
// 接收文件名和大小
byte[] buffer = new byte[64];
int len = socket.getInputStream().read(buffer);
String filename = new String(buffer, 0, len);
len = socket.getInputStream().read(buffer);
int filesize = Integer.parseInt(new String(buffer, 0, len));
// 创建文件并接收文件数据
File file = new File(filename);
file.createNewFile();
DataInputStream in = new DataInputStream(socket.getInputStream());
DataOutputStream out = new DataOutputStream(new FileOutputStream(file));
int total = 0;
while (total < filesize) {
int count = in.read(buffer);
total += count;
out.write(buffer, 0, count);
}
out.close();
// 回复客户端成功信息
socket.getOutputStream().write("SUCCESS".getBytes());
socket.close();
// 客户端
Socket socket = new Socket("127.0.0.1", 8000);
// 发送文件名和大小
String filename = "test.txt";
File file = new File(filename);
int filesize = (int) file.length();
socket.getOutputStream().write(filename.getBytes());
socket.getOutputStream().write(String.valueOf(filesize).getBytes());
// 读取文件并发送文件数据
DataInputStream in = new DataInputStream(new FileInputStream(file));
byte[] buffer = new byte[1024];
int total = 0;
while (total < filesize) {
int count = in.read(buffer);
total += count;
socket.getOutputStream().write(buffer, 0, count);
}
in.close();
// 接收成功信息并断开连接
byte[] buffer = new byte[10];
int len = socket.getInputStream().read(buffer);
String msg = new String(buffer, 0, len);
if ("SUCCESS".equals(msg)) {
socket.close();
}