QT 创建UDP Socket通信
2017-12-15 11:11
302 查看
QT UDP Socket通信
UDP的通信特点:简单轻便、不可靠、面向数据报、无连接的传输协议,可以应用在可靠性不是十分重要的场合,如短消息、广播消息等。
适合应用的情况有以下几种:
1、网络数据大多为短消息;
2、拥有大量客户端;
3、对数据安全性无特殊要求;
4、网络负担非常重,但对响应速度要求高;
为了实现发送端与接收端的双向通信,在每一端需要定义两个端口:发送数据端口、接收数据端口,具体组成如下所示:
上图可以看出,发送端将数据发送到指定的发送端口,接收端从制定的接收端口接收数据,这两个端口必须保持一致。反之亦然。
b、配置发送端口:int sendPort = 1234;
c、配置接收端口:int recvPort = 4321;
d、绑定接收端口:udpSender->bind(recvPort);
e、发送数据:udpSender->wrtiteDatagram();
f、等待接收数据:通过信号SIGNAL(readyRead())触发接收槽函数,通过readDatagram()函数读取数据。
a、初始化套接字:udpRecv = new QUdpSocket();
b、配置发送端口:int sendPort = 4321; //该发送端口需要与发送端的接收端口保持一致;
c、配置接收端口:int recvPort = 1234; //该接收端口需要与发送端的发送端口保持一致;
d、绑定接收端口:udpRecv>bind(recvPort);
e、发送数据:udpSender->wrtiteDatagram();
f、等待接收数据:通过信号SIGNAL(readyRead())触发接收槽函数,通过readDatagram()函数读取数据。
5、示例
以下为示例示意图:
访问http://download.csdn.net/download/bailang_zhizun/10159814即可获得该示例。
1、UDP概述
相对与TCP通信,UDP通信是面向无连接的,也即服务器端与客户端不需要建立连接即可发送接收数据。UDP的通信特点:简单轻便、不可靠、面向数据报、无连接的传输协议,可以应用在可靠性不是十分重要的场合,如短消息、广播消息等。
适合应用的情况有以下几种:
1、网络数据大多为短消息;
2、拥有大量客户端;
3、对数据安全性无特殊要求;
4、网络负担非常重,但对响应速度要求高;
2、UDP通信
一般在UDP通信中,不存在严格意义上的服务器端、客户端,因为不需要建立连接,可以理解为发送端、接收端。发送端向指定端口发送数据,接收端从指定端口读取数据,反之亦然。为了实现发送端与接收端的双向通信,在每一端需要定义两个端口:发送数据端口、接收数据端口,具体组成如下所示:
上图可以看出,发送端将数据发送到指定的发送端口,接收端从制定的接收端口接收数据,这两个端口必须保持一致。反之亦然。
3、通信流程
1)、发送端流程
a、初始化套接字:udpSender = new QUdpSocket();b、配置发送端口:int sendPort = 1234;
c、配置接收端口:int recvPort = 4321;
d、绑定接收端口:udpSender->bind(recvPort);
e、发送数据:udpSender->wrtiteDatagram();
f、等待接收数据:通过信号SIGNAL(readyRead())触发接收槽函数,通过readDatagram()函数读取数据。
2)、接收端流程
接收端的流程与发送端基本一致,a、初始化套接字:udpRecv = new QUdpSocket();
b、配置发送端口:int sendPort = 4321; //该发送端口需要与发送端的接收端口保持一致;
c、配置接收端口:int recvPort = 1234; //该接收端口需要与发送端的发送端口保持一致;
d、绑定接收端口:udpRecv>bind(recvPort);
e、发送数据:udpSender->wrtiteDatagram();
f、等待接收数据:通过信号SIGNAL(readyRead())触发接收槽函数,通过readDatagram()函数读取数据。
4、具体实现
为了实现QT的Socket通信,需要在工程中的.pro文件中加入QT += network1)发送端
//初始化 udpSocket = new QUdpSocket(this); //创建UDP Socket QString portStr = portLineEdit->text(); //发送数据的端口 port = portStr.toInt(); portStr = portRecvLineEdit->text(); //接收数据的端口 recvPort = portStr.toInt(); bool bindResult = udpSocket->bind(recvPort); //接收数据时,需要将SOCKET与接收端口绑定在一起 if(!bindResult) { return; } //connect slot connect(sendButton, SIGNAL(clicked()), this, SLOT(sendData())); //绑定发送 connect(udpSocket, SIGNAL(readyRead()), this, SLOT(recvData())); //绑定接收 //发送函数 sendData() { QString sendStr = sendLineEdit->text(); if(sendStr.isEmpty()) { return; } //QHostAddress::Broadcast,指定向广播地址发送 int length = udpSocket->writeDatagram(sendStr.toStdString().c_str(), QHostAddress::Broadcast, port); //向指定端口发送数据 if(length != sendStr.length()) { QMessageBox::information(this, "消息提示", "发送失败!"); return; } } //接收数据函数 recvData() { while(udpSocket->hasPendingDatagrams()) { QByteArray datagram; datagram.resize(udpSocket->pendingDatagramSize()); udpSocket->readDatagram(datagram.data(), datagram.size()); QString msg = datagram.data(); showRecvTextEdit->insertPlainText(msg + "\n"); //showRecvTextEdit->setText(msg); } }
2)接收端
请参考发送端的实现,注意发送端口与接收端口的一一对应。5、示例
以下为示例示意图:
访问http://download.csdn.net/download/bailang_zhizun/10159814即可获得该示例。
相关文章推荐
- Qt开发:释放线程中创建的QUdpSocket对象
- Qt 的udpSocket通信及相关
- Qt开发:释放线程中创建的QUdpSocket对象
- linux 多次创建不同的UDP socket进行通信,最终通信用的UDP 源端口以最后一次创建的socket使用的源端口为准
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- 两台pc机用一个socket通信,每个pc机创建两个线程一个发消息一个收消息 windows socket
- 网路编程Socket通信之UDP
- python应用系列教程——python使用socket创建udp服务器端和客户端
- QT之UDP通信总结
- Linux网络通信(二)Socket编写TCP/UDP
- 关于Qt移植后环境变量的设置 qt移植到arm中文显示问题解决 实现pc与tiny210 arm开发板 udp通信
- 如何释放线程中创建的QUdpSocket对象
- Java 基于 UDP 实现 Socket中的多客户端通信
- [python] 专题七.网络编程之套接字Socket、TCP和UDP通信实例
- QT中的SOCKET的通信
- C# 通过socket实现UDP 通信
- java 基于UDP的Socket网络通信
- Socket通信——TCP、UDP区别总结、使用场景
- Qt-----实现Udp通信
- QT socket Tcp/IP通信