使用nio 实现udp接受数据
时间: 2024-05-06 21:20:33 浏览: 240
以下是使用Java NIO实现UDP接收数据的示例代码:
```java
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.DatagramChannel;
public class UDPReceiver {
private static final int PORT = 8888;
public static void main(String[] args) {
try (DatagramChannel channel = DatagramChannel.open()) {
channel.socket().bind(new InetSocketAddress(PORT));
System.out.println("UDP receiver started on port " + PORT);
ByteBuffer buffer = ByteBuffer.allocate(1024);
while (true) {
buffer.clear();
channel.receive(buffer);
buffer.flip();
String message = new String(buffer.array(), 0, buffer.limit());
System.out.println("Received message: " + message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
代码解释:
1. 首先创建一个DatagramChannel对象,它是NIO中用于UDP通信的通道。
2. 调用`bind()`方法将通道绑定到指定端口。
3. 进入循环,每次循环先清空缓冲区,然后调用`receive()`方法接收数据,将数据写入缓冲区。
4. 调用`flip()`方法将缓冲区从写模式切换到读模式。
5. 使用`array()`方法获取缓冲区的字节数组,将其转换为字符串并打印出来。
注意:
1. `DatagramChannel`是非阻塞的,因此在调用`receive()`方法时可能会立即返回null。
2. 在实际应用中,通常需要使用多线程来处理接收到的数据。
阅读全文