UDP编程
概述
在java 中使用udp编程,需要使用Socket,应为在使用UDP时,必须指定端口号和ip地址。注意:UDP端口和TCP端口是两套独立的端口,即一个程序使用tcp占用了一个端口不影响另一个程序使用udp占用相同的端口
服务器端
在服务器端,使用udp需要监听指定的端口,java提供了DatagramSocket来实现这个功能,代码如下
服务器使用如下语句在指定端口监听udp数据包
如果没有去他应用占据这个端口,那么监听成功,我们就使用一个无线循环来处理收到的数据包
要接收数据包就要准备一个byte[]缓冲区,并通过datagramPacket实现接收
当服务器收到一个或多个datagramPacket后,通常必须立刻回复一个或多个udp包,发送udp包,也是通过DatagramPacket实现的`Byte[] data=…
packet.setData(data);
ds.send(packet)
客户端
和服务器端相比,客户端使用udp时,只需向服务器端发送udp包,然后接收返回的udp包
客户端打开一个datagramPacket使用以下代码
客户端,创建DatagramPacket实例时,不需要指定端口,而是由操作系统指定一个当前未使用的端口,紧接着调用SetSoTimeout(1000)设定时间最多不会超过一秒接收到后续包,而服务器端可以无限等待
如果客户端希望向两个不同的服务器发送udp包,那么必须创建两个不同的DatagramPacket实例
客户端必须先发udp包,这样服务器才能知道客户端的地址和端口号
如果客户端认为通信结束,可以调用disconnect断开连接,注意不是真正断开连接,只是清楚了客户端的DatagramPacket实例记录的远程服务器地址端口号,这样服务器端就可以连接其他的客户端了