针对“Java基于TCP方式的二进制文件传输”的完整攻略,我将从以下几个方面进行详细的讲解:
- Java TCP编程简介;
- 文件读取与传输;
- Java TCP方式二进制文件传输的实现。
1. Java TCP编程简介
TCP/IP是Internet上最常用的协议,在Java中,我们可以使用Socket和ServerSocket实现TCP编程。其中,Socket用于实现客户端的连接,而ServerSocket则用于实现服务器端的监听。
Java TCP编程的主要流程如下:
- 服务器端创建监听端口,并等待客户端的连接请求;
ServerSocket serverSocket = new ServerSocket(portNum);
Socket socket = serverSocket.accept();
- 客户端创建Socket连接服务器端;
Socket socket = new Socket(host, portNum);
- 服务器端与客户端通过输入输出流进行数据的发送和接收,进行通信。
OutputStream outputStream = socket.getOutputStream();
outputStream.write(data);
InputStream inputStream = socket.getInputStream();
inputStream.read(data);
2. 文件读取与传输
在进行Java基于TCP方式的二进制文件传输之前,我们需要先了解如何进行文件读取和传输。
Java可以通过FileInputStream和FileOutputStream实现文件的读写操作。具体实现流程如下:
- 打开需要读写的文件并创建对应的输入/输出流;
FileInputStream fis = new FileInputStream(filePath);
FileOutputStream fos = new FileOutputStream(filePath);
- 读写文件的过程中,可以使用byte[]数组进行缓存,可以提高读写效率。
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
- 关闭输入/输出流。
fis.close();
fos.close();
3. Java TCP方式二进制文件传输的实现
了解了Java TCP编程和文件读写的基本操作后,我们可以通过以下步骤来实现Java基于TCP方式的二进制文件传输:
- 服务器端创建ServerSocket并进行监听;
ServerSocket serverSocket = new ServerSocket(portNum);
Socket socket = serverSocket.accept();
- 客户端创建Socket连接服务器端;
Socket socket = new Socket(host, portNum);
- 服务器端读取文件并通过socket输出流传输给客户端;
FileInputStream fis = new FileInputStream(filePath);
OutputStream outputStream = socket.getOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
- 客户端通过socket输入流读取服务器端传输的文件内容并保存为文件;
InputStream inputStream = socket.getInputStream();
FileOutputStream fos = new FileOutputStream(saveFilePath);
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
- 关闭相关输入输出流。
fis.close();
inputStream.close();
outputStream.close();
fos.close();
以下是一个完整的Java基于TCP方式的二进制文件传输的示例代码:
public class FileTransfer {
private static final String host = "localhost";
private static final int portNum = 8888;
private static final String filePath = "test.txt";
private static final String saveFilePath = "test_save.txt";
public static void main(String[] args) throws IOException {
if (args[0].equalsIgnoreCase("server")) {
serverStart();
} else if (args[0].equalsIgnoreCase("client")) {
clientStart();
} else {
System.out.println("incorrect parameter");
}
}
// 服务器端
private static void serverStart() throws IOException {
ServerSocket serverSocket = new ServerSocket(portNum);
System.out.println("Server started and listening to port " + portNum);
Socket socket = serverSocket.accept();
System.out.println("Client " + socket.getInetAddress().getHostName() + " connected");
FileInputStream fis = new FileInputStream(filePath);
OutputStream outputStream = socket.getOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
System.out.println("File sent");
fis.close();
outputStream.close();
}
// 客户端
private static void clientStart() throws IOException {
Socket socket = new Socket(host, portNum);
System.out.println("Connected to Server " + host + " on port " + portNum);
InputStream inputStream = socket.getInputStream();
FileOutputStream fos = new FileOutputStream(saveFilePath);
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
System.out.println("File received");
inputStream.close();
fos.close();
}
}
示例中演示了如何通过FileTransfer类的main方法根据命令参数启动客户端或服务器,可以使用以下命令运行启动程序:
- 运行服务器:
java FileTransfer server
- 运行客户端:
java FileTransfer client
以上就是Java基于TCP方式的二进制文件传输的完整攻略,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java基于TCP方式的二进制文件传输 - Python技术站