网站首页
IC库存
IC展台
电子资讯
技术资料
PDF文档
我的博客
IC72论坛
ic72 logo
资料首页最新产品 技术参数 电路图 设计应用 解决方案 代理商查询 IC替换 IC厂商 电子辞典
关键字: 技术文章 PDF资料 IC价格 电路图 代理商查询 IC替换 IC厂商 电子辞典

迅为4412开发板Qt网络编程-UDP实现服务器和客户端

UDP 协议是开放式,无连接,不可靠的传输层通信协议,但它收发数据的速度相对于 TCP 快很多,常用在传输音视频等数据量非常大的场合。
udp 网络编程只需要使用一个类 QUdpSocket。

本实验中对 QUdpSocket 的基本使用:
1.创建 QUdpSocket 对象。
2.绑定端口号
3.数据到来触发 readyRead()信号。
4.读取发送数据。
5.关闭。
具体步骤:
步骤一:组装 ui 界面,和 TCP 章节搭建 UI 界面方法一致。

步骤二:编写代码
1.创建 QUdpSocket 对象,使用 bind 函数绑定端口号和套接字,数据报到来后会发出信 号
(),在绑定的槽函数内去读取数据。
2.读取数据,数据到来 hasPendingDatagrams()返回 true,再用 pendingDatagramSize()获取数据报的长度,如果数据没有被读取
完,hasPendingDatagrams()就会返回 true,直至数据都被读取完。
readDatagram(data,size);
参数 data 为读取的数据,size 为数据长度。
3.发送数据,使用 writeDatagram 函数,
writeDatagram(const char *data, qint64 len, const QHostAddress &host, quint16 port);
Data:发送的数据。
Len:发送的数据长度。
Host:目标 IP 地址。
Port:目标端口号。
4.关闭 socket 套接字。
代码如下:
  1. udp.h
  2. #include
  3. #include
  4. namespace Ui {
  5. class Udp;
  6. }
  7. class Udp : public QMainWindow
  8. {
  9. Q_OBJECT
  10. public:
  11. explicit Udp(QWidget *parent = 0); ~Udp();
  12. QUdpSocket * udpSocket;
  13. private slots:
  14. void on_pushButton_clicked();
  15. void readyRead_Slot(void);
  16. void on_pushButton_3_clicked();
  17. void on_pushButton_2_clicked();
  18. private:
  19. Ui::Udp *ui;
  20. };
  21. udp.cpp:
  22. Udp::Udp(QWidget *parent) :
  23. QMainWindow(parent), ui(new Ui::Udp)
  24. {
  25. ui->setupUi(this);
  26. udpSocket = new QUdpSocket(this);
  27. }
  28. Udp::~Udp()
  29. {
  30. delete ui;
  31. }
  32. /*
  33. * 打开按钮
  34. */
  35. void Udp::on_pushButton_clicked()
  36. {
  37. //绑定本端口的端口号
  38. if(udpSocket->bind(ui->cliEdit->text().toUInt()) == true){
  39. QMessageBox::information(this,"提示","成功");
  40. }else{
  41. QMessageBox::information(this,"提示","失败");
  42. }
  43. //绑定数据信号和槽函数
  44. connect(udpSocket,SIGNAL(readyRead()),this,SLOT(readyRead_Slot()));
  45. }
  46. /*
  47. *读取数据槽函数
  48. */
  49. void Udp::readyRead_Slot()
  50. {
  51. QString buf;
  52. QByteArray array;
  53. //hasPendingDatagrams()返回 true 时表示至少有一个数据报在等待被读取
  54. while(udpSocket->hasPendingDatagrams()){
  55. //获取数据
  56. array.resize(udpSocket->pendingDatagramSize());
  57. udpSocket->readDatagram(array.data(),array.size());
  58. buf = array.data();
  59. ui->recvEdit->appendPlainText(buf);
  60. }
  61. }
  62. /*
  63. * 发送数据
  64. */
  65. void Udp::on_pushButton_3_clicked()
  66. {
  67. quint16 port;
  68. QString sendBuff;
  69. QHostAddress address;
  70. address.setAddress(ui->ipEdit->text());//目标机地址
  71. port = ui->portEdit->text().toInt();//目标机端口号
  72. sendBuff = ui->sendEdit->text();//发送的数据
  73. //发送
  74. udpSocket->writeDatagram(sendBuff.toLocal8Bit().data(),sendBuff.length(),address,port);
  75. }
  76. /*
  77. *关闭
  78. */
  79. void Udp::on_pushButton_2_clicked()
  80. {
  81. udpSocket->close();
  82. }
复制代码

步骤三:运行测试,收发功能正常如图:


热门搜索:PS-415-HG-OEM PDU1215 BQ25895MRTWR TLP1008TEL ULTRABLOK IS-1000 2838319 CC2544RHBR LC1800 PS-615-HG BSV52R 6SPDX-15 PSF2408 2320322 SBB2808-1 UL800CB-15 SBB830-QTY10 02M5000JF SBB1005-1 DRV8313PWPR PS3612 RS1215-RA TLM825GF 602-15 LCR2400
COPYRIGHT:(1998-2010) IC72 达普IC芯片交易网
客户服务:service@IC72.com 库存上载:IC72@IC72.com
(北京)联系方式: 在线QQ咨询:点击这里给我发消息 联系电话:010-82614113 传真:010-82614123
京ICP备06008810号-21 京公网安备 11010802032910 号 企业资质