分别实现udp和tcp的文件传输和下载 JAVA语言
时间: 2024-10-17 22:04:16 浏览: 15
在Java中,UDP(用户数据报协议)和TCP(传输控制协议)用于网络通信,它们在文件传输上有所不同:
**UDP(无连接)文件传输和下载:**
UDP适合对实时性和低延迟有较高要求的情况,如音视频流传输,不适合大文件下载。因为UDP不保证数据顺序、完整性和可靠性。如果要用UDP进行文件传输,通常需要在应用层自行处理这些问题,比如可以使用UDP Data Datagram Protocol(DatagramPacket)进行数据包发送和接收。
```java
import java.net.DatagramSocket;
import java.nio.ByteBuffer;
public class UDPFileTransfer {
private final DatagramSocket socket;
public UDPFileTransfer(int port) throws IOException {
socket = new DatagramSocket(port);
}
public void sendFile(byte[] fileData, String recipientIP, int recipientPort) {
byte[] buffer = ByteBuffer.allocate(fileData.length).put(fileData).array();
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName(recipientIP), recipientPort);
try {
socket.send(packet);
} catch (IOException e) {
// handle exception
}
}
// ... 其他接收数据并保存到本地的逻辑
}
```
**TCP(面向连接)文件传输和下载:**
TCP提供的是全双工连接,它确保了数据的可靠传输,适用于文件下载等场景。Java的`Socket`或`ServerSocket`可用于TCP通信。
```java
import java.io.*;
import java.net.Socket;
public class TCPFileDownload {
public static void main(String[] args) throws IOException {
Socket client = new Socket("example.com", 80); // 假设目标服务器端口是80
FileOutputStream outputStream = new FileOutputStream("downloaded_file.txt");
InputStream inputStream = client.getInputStream();
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
outputStream.close();
inputStream.close();
client.close();
}
}
```
阅读全文