UDP通信
转自传智播客:
1、 DatagramPacket
在码头发送和接收货物时都需要使用集装箱来装载货物,同样,使用UDP通信时,发送和接收的数据也需要通过集装箱进行传输,这里的集装箱就是一个数据包。在JDK中提供DatagramPacket的类,该类的功能就是封装数据包,用于存放发送或者接收的信息。
DatagramPacket(byte[] buf,int length):
该构造方法在创建DatagramPacket对象时,只指定了数据包的内存空间(buf)和大小(length),相当于只定义了集装箱的大小。因此,在接收数据时,我们是没法事先就知道哪个地址和端口的Socket会发来数据,就像我们要准备一个集装箱去接收发给我们的货物时,是不用标明发货人或收获人的地址的,所以我们使用该构造方法来创建接收端的DatagramPacket对象。
2、 DatagramSocket
在发送和接收货物都需要使用集装箱,但是只有集装箱还不够,还得有发送和接收集装箱的码头,在JDK中提供了一个类似码头功能的DatagramSocket类,用在接收端和发送端。DatagramSocket类常用的构造方法如下:
DatagramSocket():
该构造方法用于创建发送端的DatagramSocket对象,在创建DatagramSocket对象时,并没有指定端口号,此时,系统会分配一个没有被其它网络程序所使用的端口号。
DatagramSocket(intport):
该构造方法既可用于创建接收端的DatagramSocket对象,还可以创建发送端的DatagramSocket对象,在创建接收端的DatagramSocket对象时,必须要指定一个端口号,这样就可以监听指定的端口。
3、 UDP网络程序DatagramSocket
通过前面的讲解,我们知道实现UDP通信需要一个发送端程序发送数据和一个接收端程序接收数据。接下来通过两个例程来实现接收端和发送端程序,演示一下UDP通信的过程,由于在UDP通信时,接收端需要先运行,否则数据容易丢失,因此,先带大家来实现接收端程序,代码如下所示:
package test.net;
import java.net.*;
//接收端程序
public class UDP_Server {
public static void main(String[] args) throws Exception {
DatagramPacket dp = null;
DatagramSocket ds = null;
byte[] buf = new byte[1024]; // 接收数据的数组
ds =new DatagramSocket(8954);
dp =new DatagramPacket(buf, 1024);
System.out.println("等待接收数据");
ds.receive(dp);// 等待接收数据,如果没有数据则会阻塞
String str = new String(dp.getData(), 0, dp.getLength()) + "from "
+dp.getAddress().getHostAddress() + ":" + dp.getPort();
System.out.println(str);
ds.close();//释放资源
}
}
package test.net;
import java.net.*;
//发送端程序
public class UDP_Client {
public static void main(String[] args) throws Exception {
DatagramPacket dp = null;
DatagramSocket ds = null;
ds =new DatagramSocket(3000);
String str = "hello world";//要发送的数据
/*
*创建一个要发送的数据包
*数据包包括发送的数据,数据的长度,接收端的IP地址已经端口号
*/
dp = new DatagramPacket(str.getBytes(), str.length(),
InetAddress.getByName("localhost"),8954);
System.out.println("发送信息");
ds.send(dp);
ds.close();
}
}
上面的代码代表的是一个接收端程序,用来接收数据。在创建DatagramSocket对象时,指定其监听的端口号为8954,创建DatagramPacket对象时传入一个1024大小的字节数组用来接收数据,当调用DatagramSocket的receive(DatagramPacket p)方法接收到数据以后,通过DatagramPacket的getData()方法获取接收到字节数组类型的数据,通过getLength()方法获取接收到数据的长度,然后用String类的构造方法把得到的数据转换成字符串的形式打印出来。
一个发送端程序,DatagramSocket的send()方法用来发送数据。在创建DatagramPacket对象时需要指定目标IP地址和端口号,而且端口号必须要和接收端指定的端口号一致,否则接收端接收不到数据。
在接收端程序阻塞的状态下,运行发送端程序,接收端程序就会收到发送端发送的数据而结束阻塞状态,打印接收的数据。
Have a Nice day!!
分享到:
相关推荐
01-网络-udp(python和linux高级编程阶段 代码和截图)01-网络-udp(python和linux高级编程阶段 代码和截图)01-网络-udp(python和linux高级编程阶段 代码和截图)01-网络-udp(python和linux高级编程阶段 代码和...
学习网络程序设计-03-winsock编程详解-udp通信编程-v.ppt
在IT行业中,网络通信是至关重要的部分,而TCP(传输控制协议)和UDP(用户数据报协议)则是网络通信中最常用的两种传输层协议。"TCP-UDP服务管理 V3.01"是一款专为开发者设计的工具,它旨在帮助开发者进行TCP/IP...
总的来说,TCP-UDP数据包自动发送工具V3.01是学习网络通信和实践网络编程的有力辅助工具。它不仅能够帮助我们理解网络协议的运作机制,还能够提升我们在实际工作中的问题解决能力。无论你是程序员还是网络管理员,都...
用户数据报协议(UDP)是TCP/IP模型中的一个重要组成部分,是一种无连接的传输层协议。它的设计目标是在传输数据...在Android平台上,开发者可以利用UDP进行网络编程,但必须意识到并处理由于协议特性带来的潜在问题。
本篇将探讨如何在Linux环境下使用UDP协议进行网络编程,以实现探测在线好友的功能。 首先,UDP(User Datagram Protocol)是一种无连接的、不可靠的传输协议,它不保证数据包的顺序、完整性和可靠性。UDP协议主要...
在IT行业中,网络编程是构建分布式系统和互联网应用程序的基础,而UDP(User Datagram Protocol)作为传输层协议之一,因其轻量级、高效的特点,在实时通信、流媒体、在线游戏等领域得到了广泛应用。本资源"商业编程...
C#网络编程---第3章_UDP应用编程
在计算机网络领域,TCP(传输控制协议)和...总的来说,理解TCP和UDP的特性以及如何管理其服务,对于网络编程和系统运维至关重要。正确配置和测试TCP-UDP服务,可以确保数据的高效、可靠传输,满足各种应用场景的需求。
全面讲述了C#网络编程的基础和原理,并且带有实例,非常实用!
通过TCP-UDP助手,用户可以深入理解TCP和UDP的工作原理,诊断网络问题,优化应用性能,对于网络编程和系统管理而言,它是一款不可或缺的实用工具。在日常工作中,无论是开发网络应用程序,还是进行网络故障排查,都...
在IT行业中,网络编程是构建分布式系统和网络应用的基础,而UDP(User Datagram Protocol)是一种无连接的、不可靠的传输层协议。本篇将详细探讨UDP编程中的关键组件——`DatagramSocket`和`DatagramPacket`,以及...
"TCP-UDP调试助手"这个工具集成了TCP服务器、UDP服务器、TCP客户端和UDP客户端,是开发者进行网络编程时非常实用的辅助工具。TCP服务器可以模拟服务端,处理来自客户端的连接请求,进行数据交换;UDP服务器则接收并...
《TCP-UDP服务管理 V3.02》是一款专为网络通信开发与测试设计的工具,它支持多线程运行,能同时发送...通过深入实践和利用这个工具,开发者可以提高网络编程的效率,确保其软件在各种网络环境下都能稳定、高效地工作。
标题中的“网络通讯--UDP.rar...这个压缩包可能是学习和实践网络通信,特别是UDP通信的一个实例,对于深入理解网络编程和C++应用开发有很好的参考价值。通过阅读和运行其中的代码,可以加深对网络协议和C++编程的理解。
C#网络编程---第3章_UDP应用编程.ppt C#网络编程---第4章_P2P应用编程.ppt C#网络编程---第5章_SMTP与POP3应用编程.ppt C#网络编程---第6章_网络数据加密与解密.ppt C#网络编程---第7章_三维设计与多媒体编程.ppt C#...
在IT行业中,FINS(Fieldbus Network System)是欧姆龙(Omron)公司开发的一种通信协议,主要用于其PLC(可编程逻辑控制器)产品线。FINS协议提供了多种通信方式,包括TCP/IP、RS-232/485以及我们这里关注的UDP...
【Socket编程】--UDP异步通讯一服务器多客户端 Socket编程是网络通信的基础,而UDP(User Datagram Protocol)是一种无连接、不可靠的传输...这个项目对于理解和实践网络编程中的并发处理和异步通信机制非常有帮助。
TCP到UDP的转换涉及到网络编程的多个层面,包括套接字编程、协议解析、数据包重组等。开发者需要深入理解TCP和UDP的内在工作原理,以及如何在两端正确处理这些转换,以确保通信的效率和可靠性。此外,对于安全性的...
网络编程(七层协议+tcp_udp+socket编程)_python udp