Java NIO DatagramChannel

Java NIO DatagramChannel是可以发送和接收UDP数据包的通道,由于UDP是无连接的网络协议,因此默认情况下,不能像从其他通道一样对DatagramChannel进行读写,但可以发送和接收数据包。

 

1.打开DatagramChannel

DatagramChannel channel = DatagramChannel.open();
channel.socket().bind(new InetSocketAddress(9999));

 

本示例打开一个DatagramChannel,它可以在端口9999上接收数据包。

 

2.接收数据

可以通过调用DatagramChannel的receive()方法从DatagramChannel接收数据:

ByteBuffer buf = ByteBuffer.allocate(48);
buf.clear();

channel.receive(buf);

 

receive()方法会将接收到的数据包内容复制到给定的Buffer中,如果接收到的数据包包含的数据量超过缓冲区可以容纳的数据量,则其余数据将被丢弃。

 

3.发送数据

可以通过调用DatagramChannel的send()方法来发送数据:

String newData = "New String to write to file..."
                    + System.currentTimeMillis();
    
ByteBuffer buf = ByteBuffer.allocate(48);
buf.clear();
buf.put(newData.getBytes());
buf.flip();

int bytesSent = channel.send(buf, new InetSocketAddress("baidu.com", 80));

 

4.连接到指定的地址

可以将DatagramChannel“连接”到网络上的特定地址。由于UDP是无连接的,因此这种连接地址的方法不会像TCP通道那样建立真正的连接,而是它锁定了DatagramChannel,因此只能从一个特定地址发送和接收数据包。

这是一个例子:

channel.connect(new InetSocketAddress("baidu.com", 80));    

 

连接后,也可以使用read()和write()方法,就像使用传统通道一样,只是不能保证数据的发送:

int bytesRead = channel.read(buf);    
int bytesWritten = channel.write(buf);

 

原文地址: https://www.zhblog.net/go/java/tutorial/java-nio-datagram-channel?t=621

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值