这篇文章主要介绍“Java怎么实现基于UDP协议的网络通信UDP编程”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java怎么实现基于UDP协议的网络通信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编程”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://blog.csdn.net/qq_41596778/article/details/125843744