用Java利用UDP通信实现一个发送端和接收端传输文件的功能,要求发送端不断读取本地文件并把读取的文件内容通过UDP传输给接收端,接收端把收到的内容写入文件。
时间: 2024-03-10 18:43:49 浏览: 117
java 中模拟UDP传输的发送端和接收端实例详解
好的,我可以为您提供一些参考代码。首先,让我们来看一下发送端的代码:
```java
import java.io.*;
import java.net.*;
public class UDPSender {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket();
// 读取本地文件
File file = new File("path/to/file");
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
// 发送数据
int len;
while ((len = fis.read(buffer)) != -1) {
DatagramPacket packet = new DatagramPacket(buffer, len, InetAddress.getByName("接收端IP"), 8888);
socket.send(packet);
}
// 关闭资源
fis.close();
socket.close();
}
}
```
在发送端代码中,我们使用 `DatagramSocket` 类创建一个 UDP Socket,然后读取本地文件并将数据通过 UDP 发送到接收端的 IP 地址和端口号 `8888`。发送数据时,我们需要将字节数组放入 `DatagramPacket` 对象中,并指定数据包的长度和目的地 IP 地址及端口号。最后,关闭资源。
接下来,我们来看一下接收端的代码:
```java
import java.io.*;
import java.net.*;
public class UDPReceiver {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(8888);
byte[] buffer = new byte[1024];
// 接收数据
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
FileOutputStream fos = new FileOutputStream("path/to/file");
while (true) {
socket.receive(packet);
fos.write(packet.getData(), 0, packet.getLength());
if (packet.getLength() < buffer.length) {
break;
}
}
// 关闭资源
fos.close();
socket.close();
}
}
```
在接收端代码中,我们也使用 `DatagramSocket` 类创建一个 UDP Socket,但是需要指定一个端口号 `8888`。接收数据时,我们需要创建一个空的 `DatagramPacket` 对象来存放接收到的数据,然后通过 `socket.receive(packet)` 方法接收数据。接收到的数据将会被放入 `packet` 对象中,我们可以使用 `packet.getData()` 方法获取字节数组,并将其写入到文件中。
需要注意的是,我们在接收数据时需要不断循环接收,直到接收到的数据包长度小于缓冲区大小。这是因为 UDP 是无连接的协议,接收端不知道发送端会发送多少数据,因此需要循环接收数据直到数据传输完毕。
希望这段代码能够对您有所帮助!
阅读全文