网络编程-UDP通信程序
Posted Dinesaw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程-UDP通信程序相关的知识,希望对你有一定的参考价值。
网络编程-UDP通信程序
InetAddress address = InetAddress.getByName("Dinesaw");
System.out.println("主机名:" + address.getHostName());
System.out.println("IP地址:" + address.getHostAddress());
UDP发送数据
-
Java中的UDP通信
- UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送,接收数据的对象,因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念
-
构造:ds是快递公司,dp是快递包裹
-
发送数据的步骤
- 创建发送端的Socket对象(DatagramSocket)
- 创建数据,并把数据打包
- 调用DatagramSocket对象的方法发送数据
- 关闭发送端
-
代码演示
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.nio.charset.StandardCharsets; public class sendme public static void main(String[] args) throws IOException DatagramSocket ds = new DatagramSocket(); String str = "HELLO!"; byte[] bytes =str.getBytes(); InetAddress address = InetAddress.getByName("Dinesaw"); int port = 10086; DatagramPacket dp = new DatagramPacket(bytes,bytes.length,address,port); ds.send(dp); ds.close();
UDP接收数据
-
接收数据的步骤
- 创建接收端的Socket对象(DatagramSocket)
- 创建一个数据包,用于接收数据
- 调用DatagramSocket对象的方法接收数据
- 解析数据包,并把数据在控制台显示
- 关闭接收端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class saveme
public static void main(String[] args) throws IOException
DatagramSocket ds = new DatagramSocket(10086);
//创建一个数据包,用于接收数据
byte[] bys = new byte[1024];
DatagramPacket dp = new DatagramPacket(bys, bys.length);
ds.receive(dp);
System.out.println("接收到的数据是:" + new String(dp.getData(), 0,dp.getLength()));
UDP通信程序练习
-
案例需求
UDP发送数据:数据来自于键盘录入,直到输入的数据是886,发送数据结束
UDP接收数据:因为接收端不知道发送端什么时候停止发送,故采用死循环接收
-
代码实现
-
saveme
-
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; public class saveme public static void main(String[] args) throws IOException DatagramSocket ds = new DatagramSocket(10086); while (true) //创建一个数据包,用于接收数据 byte[] bys = new byte[1024]; DatagramPacket dp = new DatagramPacket(bys, bys.length); ds.receive(dp); System.out.println("接收到的数据是:" + new String(dp.getData(),0,dp.getLength()));
-
-
sendme
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Scanner; public class sendme public static void main(String[] args) throws IOException DatagramSocket ds = new DatagramSocket(); Scanner sc = new Scanner(System.in); while (true) String s = sc.nextLine(); //输入的数据是886,发送数据结束 if ("886".equals(s)) break; byte[] bys = s.getBytes(); DatagramPacket dp = new DatagramPacket(bys, bys.length, InetAddress.getByName("Dinesaw"), 10086); ds.send(dp); ds.close();
基于UDP协议的网络通信应用程序(UDP-Socket)
可点击右上角的 …,分享这篇文章
前两篇文章介绍了基于TCP/IP协议的网络通信应用程序。相比起TCP/IP协议的可靠,面向连接,基于字节流通信这些特性,UDP协议是一种轻量级,不可靠,基于数据报的传输协议。
很多人会问,为什么UDP协议传输不可靠还要继续使用它?那是因为UDP协议使用起来很方便,不需要建立连接,资源消耗少,通信效率高,在线播放音频或者视频的时候,使用UDP协议比使用TCP/IP协议有更高的传输效率,因为在这种使用场景下,即使丢失一两个数据包,对结果都影响不大。在网络质量不佳的情况下,使用UDP协议传输可能丢包严重,开发者应该注意根据不同的场合选择合适的协议。
对于UDP传输协议,数据报有以下三种传输方式:
使用嵌入式QT进行UDP协议的网络通信应用程序开发,QT的network类库提供了QUdpSocket类,这个类继承于QAbstractSocket类,并向应用层提供了UDP通信的基本操作方法,如绑定函数bind(),加入组播joinMulticastGroup(),离开组播leaveMulticastGroup(),数据报的读写操作函数,等等。具体可以参阅 QtNetwork/qudpsocket.h 文件的内容。
目标:
使用QT提供的UDP网络通信类,实现一个简单的Udp_Socket收发工具。
功能:
(3)可选择UDP数据报的发送方式:组播,单播,广播。
(4)界面显示UDP协议的网络收发数据,并提供清屏按钮。
(5)提供手动发送按钮和自动发送按钮。
开发板运行Udp_Socket收发工具后,界面如下图所示:
界面描述:
(3)选择UDP的发送方式,单播,组播或广播。
(5)点击 [START_AUTO_SEND] ,以一秒的频率间隔发送数据。
以下是应用程序的开发过程。
1、 先用Qt Creator构建一个工程,命名为:009_udp_socket,关于如何构建工程,请参考“第一个嵌入式QT应用程序”的具体内容。
2、 创建工程后,修改009_udp_socket.pro里面的内容,添加QT里面的网络通信模块network,使工程支持QT网络类的调用,如下图所示。
3、 双击打开“widget.ui”文件,构建界面,构建后的界面如下图所示:
应用程序界面描述如上面内容所示,这里不作重复。
6、 当应用程序接收到UDP的数据报时,底层系统就会触发readRead()信号,进而调用数据接收的槽函数void UdpSocket::slot_udp_read_data()进行处理。数据接收槽函数如下图所示:
这个函数不断读取缓冲区的数据,读取完成后,发送信号通知ui界面进行数据显示。
8、 以上就是UdpSocket类的主要函数实现,接下来,分析一下窗体构造Widget类的具体实现过程。
10、 应用程序可以自由选择(单播,组播,广播)这三种发送方式的其中一种,可以通过使用radioButton来实现互斥,当发送方式发生改变时,调用以下槽函数进行处理。
12、 以上就是整个Udp_Socket应用程序的开发过程,相比起TCP/IP,使用UDP协议进行数据传输是比较方便快捷的,开发者应该根据不同的应用场景选择不同的数据传输协议,每种协议都各有利弊,合适的就是最好的。
13、 把应用程序下载到开发板上运行,如下图所示:
-- END --
以上是关于网络编程-UDP通信程序的主要内容,如果未能解决你的问题,请参考以下文章