Java网络编程之UDP网络通信详解
1.UDP网络通信编程原理
1.1 UDP网络通信编程介绍
类 DatagramSocket 何 DatagramPacket(数据包/数据报) 实现了基于 UDP协议网络程序;
UDP数据报通过数据报套接字 DatagramSocket 发送和接收,系统不保证 UDP数据报一定能够安全送达目的地,也不确定什么时候可以抵达;
DatagramPacket 对象封装了 UDP数据报,在数据报中包含了发送端IP地址和端口号,以及接收端的IP地址和端口号;
UDP协议中每个数据报都给出了完整的地址信息,因此无法建立发送方与接收方的连接。
没有明确的服务端和客户端,演变成数据的发送端和接收端;
接收数据和发送数据都是通过 DatagramSocket 对象完成。
1.2 UDP网络通信编程的基本流程
核心的两个类/对象,DatagramSocket与DatagramPacket;
建立发送端和接收端;
建立数据包;
调用DatagramSocket的发送和接收方法;
关闭DatagramSocket。
2.UDP网络通信编程案例
1.编写一个接收端A,一个发送端B;
2.接收端在 9999端口等待接收数据(receive);
3.发送端向接收端发送数据:“你好!接收端”;
4.接收端接收到发送端的数据后,回复:“你好!发送端”,再退出;
5.发送端接收回复的数据,退出。
UDPReceiverA
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPReceiverA {
public static void main(String[] args) throws IOException {
//1.创建一个DatagramSocket对象,准备在9999接收数据
DatagramSocket socket = new DatagramSocket(9999);
//2.构建一个DatagramPacket对象,准备接收数据
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
//3.调用接收方法,将通过网络传输的 DatagramPacket对象 填充到 packet对象
System.out.println("接收端A 等待接收数据...");
socket.receive(packet);
//4.把packet进行拆包,取出数据
int length = packet.getLength();//实际数据字节长度
byte[] data = packet.getData();//实际接收的数据
String s = new String(data, 0, length);
System.out.println(s);
//回复信息给B端
data = "你好!发送端".getBytes();
packet = new DatagramPacket(data, 0, data.length,
InetAddress.getLocalHost(), 9998);
socket.send(packet);
//5.关闭资源
socket.close();
}
}
UDPSenderB
import java.io.IOException;
import java.net.*;
public class UDPSenderB {
public static void main(String[] args) throws IOException {
//1.创建 DatagramSocket 对象,准备在9998发送和接收数据
DatagramSocket socket = new DatagramSocket(9998);
//2.将需要发送的数据,封装到 DatagramPacket 中
byte[] data = "你好!接收端".getBytes();
DatagramPacket datagramPacket =
new DatagramPacket(data, 0, data.length,
InetAddress.getLocalHost(), 9999);
socket.send(datagramPacket);
//接收A消息
socket.receive(datagramPacket);
int length = datagramPacket.getLength();//实际数据字节长度
data = datagramPacket.getData();//实际接收的数据
String s = new String(data, 0, length);
System.out.println(s);
//关闭资源
socket.close();
}
}
到此这篇关于Java网络编程之UDP网络通信详解的文章就介绍到这了,更多相关Java UDP网络通信内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341