一、简介
同tcp通信一样,udp通信也有同步非阻塞式,可同时发送和读取数据,与多个客户端通信。
二、关键类
1、java.net.DatagramSocket
报文socket,同udp阻塞通信一样。
2、java.nio.channels.DatagramChannel
报文通道,可同时与多个客户端通信,常用方法有:
DatagramChannel.open():静态方法,生成DatagramChannel;
configureBlocking(boolean block):指定通道是否为阻塞模式,默认为阻塞式;
connect(SocketAddress remote):虚拟连接目标地址,此时只能向指定地址通信,实际udp通信时不事先建立连接;
disconnect():释放虚拟链接,通道又可与多个地址通信;
write(ByteBuffer src):发送数据,只适用于建了虚拟连接的channel;
send(ByteBuffer src, SocketAddress target):发送数据,同时指定目标地址;
receive(ByteBuffer dst):接收数据;
read(ByteBuffer dst):接收数据,只适用于建了虚拟连接的channel;
3、java.nio.channels.Selector
事件监听器,同tcp中一样;
4、java.nio.channels.SelectionKey
事件,同tcp中一样;
三、示例
1、服务器代码
import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.nio.ByteBuffer; import java.nio.channels.DatagramChannel; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.charset.Charset; import java.util.Iterator; import java.util.Scanner; import java.util.Set; public class UdpNioServer { private static Charset charset = Charset.forNam