用udp通信实现发送端给接收端发送文件,接收端接收的发送端和接收端的java代码
时间: 2023-10-10 20:05:16 浏览: 121
以下是使用UDP实现发送文件的Java代码:
发送端:
```java
import java.io.*;
import java.net.*;
public class FileSender {
public static void main(String[] args) throws IOException {
String hostname = "localhost"; // 接收端主机名
int port = 8888; // 接收端口号
DatagramSocket socket = new DatagramSocket(); // 创建数据报套接字
InetAddress address = InetAddress.getByName(hostname); // 获取接收端IP地址
// 读取待发送文件
File file = new File("file_to_send.txt");
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024]; // 缓冲区大小为1KB
// 循环发送数据
int len;
while ((len = fis.read(buffer)) != -1) {
DatagramPacket packet = new DatagramPacket(buffer, len, address, port); // 创建数据报文
socket.send(packet); // 发送数据报文
}
// 发送长度为0的数据报文,表示文件发送完毕
DatagramPacket packet = new DatagramPacket(new byte[0], 0, address, port);
socket.send(packet);
fis.close(); // 关闭文件输入流
socket.close(); // 关闭数据报套接字
}
}
```
接收端:
```java
import java.io.*;
import java.net.*;
public class FileReceiver {
public static void main(String[] args) throws IOException {
int port = 8888; // 接收端口号
DatagramSocket socket = new DatagramSocket(port); // 创建数据报套接字
byte[] buffer = new byte[1024]; // 缓冲区大小为1KB
DatagramPacket packet = new DatagramPacket(buffer, buffer.length); // 创建数据报文
FileOutputStream fos = new FileOutputStream("received_file.txt"); // 创建文件输出流
while (true) {
socket.receive(packet); // 接收数据报文
if (packet.getLength() == 0) { // 如果数据报文长度为0,则表示文件接收完毕
break;
}
fos.write(packet.getData(), 0, packet.getLength()); // 将数据写入文件
}
fos.close(); // 关闭文件输出流
socket.close(); // 关闭数据报套接字
}
}
```
注意事项:
- 文件接收端口号应与发送端口号相同。
- 文件接收端代码应运行在接收文件的机器上。
- 文件接收端应在接收到长度为0的数据报文时停止接收。
- 为了保证数据传输的可靠性,可以在文件发送端添加确认机制,即接收端在接收到每个数据报文后都回复一个确认数据报文。如果发送端在一定时间内没有收到确认数据报文,则重传该数据报文。
阅读全文