udp编程通信基本介绍类datagramsocket和datagrampacket【数据包/数据报】实现了基于udp协议网络程序。
udp数据报通过数据报套接字datagramsocket发送和接收,系统不保证udp数据报一定能安全送到目的地,也不确信什么时候可以抵达。
datagrampacket对象封装了udp数据报,在数据报中包含了发送端的ip地址和端口号以及接收端的ip地址和端口号。
udp协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接。
基本流程核心的两个类/对象datagramsocket域datagrampacket
建立发送端,接收端。
建立数据包
调用datagramsocket的发送、接收方法
关闭datagramsocket。
udp网络编程原理示意图
udp说明:
没有明确的服务端和客户端,演变成数据的发送端和接收端。
接收数据和发生数据是通过datagramsocket对象完成。
将数据封装到datagrampacket对象/装包。
当接收到datagrampacket对象,需要进行拆包,取出数据
datagramsocket可以指定在哪个端口接收数据。
package com.study.srv.demo18;import java.io.ioexception;import java.net.*;/** * @version 1.0 * udp发送端 */public class demo11 { public static void main(string[] args) throws ioexception { //1.创建datagramsocket对象,准备发送和接收数据,在9998端口接收 datagramsocket datagramsocket = new datagramsocket(9998); //2.将需要发送的数据,封装到datagrampacket对象 string s="发送的数据"; byte[] buf=s.getbytes(); inetaddress ip = inetaddress.getbyname("192.168.0.18"); //说明:封装的datagrampacket对象 //buf 内容字节数组 //buf.length 数据长度 //ip 主机(ip) //9999 端口 datagrampacket packet = new datagrampacket(buf, buf.length, ip, 9999); //发送数据 datagramsocket.send(packet); //关闭资源// datagramsocket.close(); system.out.println("发送完毕"); //发送端变为接收端接收数据 byte[] bytes = new byte[1024]; datagrampacket datagrampacket = new datagrampacket(bytes, bytes.length); datagramsocket.receive(datagrampacket); int length = datagrampacket.getlength(); byte[] data = datagrampacket.getdata(); string string = new string(data, 0, length); system.out.println(string); datagramsocket.close(); system.out.println("接受结束"); }}
package com.study.srv.demo18;import java.io.ioexception;import java.net.datagrampacket;import java.net.datagramsocket;import java.net.inetaddress;import java.net.socketexception;/** * @version 1.0 *udp接收端 */public class demo10 { public static void main(string[] args) throws ioexception { //1.创建一个 datagramsocket对象,准备在9999接收数据 datagramsocket datagramsocket = new datagramsocket(9999); //2.构建一个datagrampacket 对象,准备接收数据 //在udp协议,一个数据包最大64k byte[] buf=new byte[1024]; datagrampacket packet = new datagrampacket(buf, buf.length); //3.接收方法 将通过网络传输的datagrampacket对象填充到packet里去。 system.out.println("接收端等待接收"); datagramsocket.receive(packet); //4.可以对packet进行拆包,取出数据,并显示 //实际接收到的数据字节长度 int length = packet.getlength(); //实际接收到的数据 byte[] data = packet.getdata(); string string = new string(data, 0, length); system.out.println(string); //5.关闭资源// datagramsocket.close(); system.out.println("接收结束"); //接收端变为发送端,发送数据 string s="接收端变为发送端,发送数据"; byte[] bytes=s.getbytes(); datagrampacket datagrampacket = new datagrampacket(bytes, bytes.length, inetaddress.getbyname("192.168.0.18"), 9998); datagramsocket.send(datagrampacket); datagramsocket.close(); system.out.println("发送完毕"); }}
以上就是java怎么实现基于udp协议的网络通信udp编程的详细内容。