UDP通信是一个不可靠协议,只管发送不管是否收到,但效率高。
TCP是可靠通信协议,采用一问一答的可靠模式,但效率低。
DatagramPacket:UDP数据报,是基于IP建立的,每台主机有65536个端口号可使用,
数据报的字节限制为65536 - 8(头信息)。
DatagramSocket:用于监听固定端口的报文
客户端向服务端发送数据的步骤:
(1)创建用于发送数据的实例
DatagramSocket socket = new DatagramSocket();
(2)准备数据,将字符串转化为字节数组。
(3)创建数据包(打包:准备包裹,填写想、地址,装入数据),将数据存入包中
InetAdress getByName(String ip):获取服务端ip
DatadramPacket(byte[] buf,int len,InetAddress address,int port)
从buf数组取len长度数据来创建数据包对象,将数据发送到address地址,port端口
DatadramPacket(byte[] buf,int offset,int len,InetAddress address,int port)
将从buf数组第offset位置开始的len个数据发送到address地址,port端口
(4)将数据包通过Socket发送到服务端
send(DatagramPacket dp):发送报文到dp
服务端接收包的步骤:
(1)创建接收包的实例socket,并固定监听port端口报文
DatagramSocket(int port):固定监听port端口
(2)创建接收包,大小应当合适
DatagramPacket(byte[] buf,int len):将len长度的数据装入buf数组中
DatagramPacket(byte[] buf,int offset,int len):将数据包中从offset开始的len长度的数据装入buf数组中
(3)通过socket接收到数据包
receive(DatadramPacket d):接收数据报到d中。该方法是一个阻塞方法,会一直等到有数据被读到才畅通
(4)使用DatagramPacket的方法拆包取数据
byte[] getData():取数据
int getLength():有效数据的长度
InetAddress getAddress():获取客户端地址
int getPort():获取客户端端口号