UDP通信原理
是一种不可靠的网络协议,只管发送,不管对方是否接收到
UDP发送数据
发送数据步骤
UDP协议是用户数据报协议
- 创建发送端的Socket对象(DatagramSocket) DatagramSocket()
- 创建数据,并把数据打包 DatagramPacket(byte[] buf,int length,InetAddress address,int port)
- 调用DatagramSocket对象的方法发送数据 void send(DatagramPacket p)
关闭发送端 void close()
发送数据程序//创建发送端的Socket对象 //DatagramSocket()构造数据报套接字并将其绑定到本地主机上的任何可用端口 DatagramSocket ds = new DatagramSocket();//alt enter 抛出异常 //创建数据,并把数据打包 //DatagramPacket(byte[] buf,int length,InetAddress address,int port) //构造一个数据包,发送长度为length的数据包到指定主机上的指定端口号 byte[] bys = "hello,udp,我来了".getBytes(); int length = bys.length; InetAddress address = InetAddress.getByName("192.168.1.66"); //alt enter 抛出异常 int port = 10086; //创建数据包 DatagramPacket dp = new DatagramPacket(bys,length,address ,port); //上面的几行代码可以优化为 DatagramPacket dp = new DatagramPacket(bys,bys.length,InetAddress.getByName("192.168.1.66"),port:10086); //调用DatagramSocket对象的方法发送数据 //send(DatagramPacket p) 从此套接字发送数据报包 ds.send(dp); //关闭发送端 //void close() 关闭数据报套接字 ds.close();
UDP接收数据
接收数据步骤
- 创建接收端的Socket对象(DatagramSocket) DatagramSocket(int port)
- 创建一个数据包,用于接收数据 DatagramPacket(byte[] buf,int length)
- 调用DatagramSocket对象的方法接收数据,把数据接收到数据包中 void receive(DatagramPacket p)
- 解析数据包,并把数据在控制台显示 byte[] getData() int getLength()
关闭接收端 void close()
接收数据程序//创建接收端的Socket对象用带参构造方法,指定一个端口 //DatagramSocket(int port)构造数据报套接字并将其绑定到本地主机上的指定端口 DatagramSocket ds = new DatagramSocket(port:10086);//alt enter 抛出异常 //创建一个数据包,用于接收数据 //DatagramPacket(byte[] buf,int length) //构造一个DatagramPacket,用于接收长度为length的数据包 byte[] bys = new byte[1024]; //创建数据包 DatagramPacket dp = new DatagramPacket(bys,bys.length); //调用DatagramSocket对象的方法接收数据,把数据接收到数据包中 ds.receive(dp); //解析数据包,并把数据在控制台显示 //byte[] getData() 返回数据缓冲区 byte[] datas = dp.getData();//这个是数据缓冲区 //int getLength() 返回要发送的数据的长度或者接收到的数据的长度 int len = dp.getLength();//拿到的是实际发送了多少数据 String dataString = new String(datas,offset:0,len); sout("数据是:"+dataString); //上面两行优化 sout("数据是:"+new String(dp.getData(),offset:0,dp.getLength())); //关闭发送端 //void close() 关闭数据报套接字 ds.close();
UDP通信程序练习
发送数据程序
//创建发送端的Socket对象
DatagramSocket ds = new DatagramSocket();//alt enter 抛出异常
//自己封装键盘录入数据
BufferedReader br = BufferedReader(new InputStreamReader(System.in));
String line;
while((line=br.readLine())!=null){//alt enter 抛出异常
//所输入的数据是886,发送数据结束
if("886".equals(line)){
break;
}
//如果不是,就创建数据,并把数据打包
byte[] bys = line.getBytes();
//创建数据包
DatagramPacket dp = new DatagramPacket(bys,length,InetAddress.getByName("192.168.1.66"),port:12345);
//调用DatagramSocket对象的方法发送数据
ds.send(dp);
}
//关闭发送端
ds.close();
接收数据程序
//创建接收端的Socket对象用带参构造方法,指定一个端口
DatagramSocket ds = new DatagramSocket(port:12345);//alt enter 抛出异常
while(true){//死循环接收
//创建一个数据包,用于接收数据
//DatagramPacket(byte[] buf,int length)
//构造一个DatagramPacket,用于接收长度为length的数据包
byte[] bys = new byte[1024];
//创建数据包
DatagramPacket dp = new DatagramPacket(bys,bys.length);
//调用DatagramSocket对象的方法接收数据,把数据接收到数据包中
ds.receive(dp);//alt enter 抛出异常
//解析数据包,并把数据在控制台显示
sout("数据是:"+new String(dp.getData(),offset:0,dp.getLength()));
}
//关闭发送端
ds.close();
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。