Qt中的UDP通信
来源:互联网 发布:小幸软件工作室 编辑:程序博客网 时间:2024/05/19 18:12
简述
相对TCP来说,UDP是一种无状态的连接,不存在客户端和服务端之分,没有监听一说,所以相对简单。
实现 Qt4.8
代码
udpwid.h
#ifndef UDPWID_H#define UDPWID_H#include <QWidget>#include <QPushButton>#include <QTextEdit>#include <QUdpSocket>namespace Ui {class udpWid;}class udpWid : public QWidget{ Q_OBJECT public: explicit udpWid(QWidget *parent = 0); ~udpWid(); void initWidget();private slots: void sendData(); void ReceData();private: Ui::udpWid *ui; QPushButton *m_SendButton; QPushButton *m_CloseButton; QTextEdit *m_SendText; QTextEdit *m_ReceText; QUdpSocket *m_UdpSocket;};#endif // UDPWID_H
udpwid.cpp
#include "udpwid.h"#include "ui_udpwid.h"#include <QHBoxLayout>#include <QVBoxLayout>#include <QHostAddress>#include <QDebug>udpWid::udpWid(QWidget *parent) : QWidget(parent), ui(new Ui::udpWid){ ui->setupUi(this); initWidget(); m_UdpSocket = new QUdpSocket(this); m_UdpSocket->bind(5555); connect(m_UdpSocket, SIGNAL(readyRead()), this, SLOT(ReceData())); connect(m_SendButton, SIGNAL(pressed()), this, SLOT(sendData()));}udpWid::~udpWid(){ delete ui;}void udpWid::initWidget(){ this->resize(800,600); this->setWindowTitle("ServerWidget_port:5555"); QVBoxLayout *VLayoutText = new QVBoxLayout(this); VLayoutText->setMargin(4); QWidget *TextWidget = new QWidget(this); TextWidget->setLayout(VLayoutText); m_ReceText = new QTextEdit(TextWidget); m_ReceText->setReadOnly(true); m_SendText = new QTextEdit(TextWidget); m_SendText->setMaximumHeight(100); VLayoutText->addWidget(m_ReceText); VLayoutText->addWidget(m_SendText); QHBoxLayout *HLayoutButton = new QHBoxLayout(this); HLayoutButton->setMargin(4); QWidget *ButtonWidget = new QWidget(this); ButtonWidget->setLayout(HLayoutButton); m_SendButton = new QPushButton(this); m_SendButton->setText(QString("Send").toUtf8().data()); m_CloseButton = new QPushButton(this); m_CloseButton->setText(QString("Close").toUtf8().data()); HLayoutButton->addWidget(m_SendButton); HLayoutButton->addStretch(); HLayoutButton->addWidget(m_CloseButton); QVBoxLayout *VLayoutMain = new QVBoxLayout(this); VLayoutMain->setMargin(2); this->setLayout(VLayoutMain); VLayoutMain->addWidget(TextWidget); VLayoutMain->addWidget(ButtonWidget);}void udpWid::sendData(){ QString str = m_SendText->toPlainText(); m_SendText->clear(); m_UdpSocket->writeDatagram(str.toUtf8(), QHostAddress("127.0.0.1"), quint16(6666));}void udpWid::ReceData(){ char buf[1024] = {0}; QHostAddress addr; quint16 port; m_UdpSocket->readDatagram(buf, sizeof(buf)); m_ReceText->setText(QString(buf));}
注:两个窗口的代码基本一致
udpwidopp.h
#ifndef UDPWIDOPP_H#define UDPWIDOPP_H#include <QWidget>#include <QPushButton>#include <QTextEdit>#include <QUdpSocket>class udpWidOpp : public QWidget{ Q_OBJECTpublic: explicit udpWidOpp(QWidget *parent = 0); ~udpWidOpp(); void initWidget();private slots: void sendData(); void ReceData();private: QPushButton *m_SendButton; QPushButton *m_CloseButton; QTextEdit *m_SendText; QTextEdit *m_ReceText; QUdpSocket *m_UdpSocket;};#endif // UDPWID_H
udpwidopp.cpp
#include "udpwidopp.h"#include "ui_udpwid.h"#include <QHBoxLayout>#include <QVBoxLayout>#include <QHostAddress>#include <QDebug>udpWidOpp::udpWidOpp(QWidget *parent) : QWidget(parent){ initWidget(); m_UdpSocket = new QUdpSocket(this); m_UdpSocket->bind(6666); connect(m_UdpSocket, SIGNAL(readyRead()), this, SLOT(ReceData())); connect(m_SendButton, SIGNAL(pressed()), this, SLOT(sendData()));}udpWidOpp::~udpWidOpp(){}void udpWidOpp::initWidget(){ this->resize(800,600); this->setWindowTitle("ClientOppWidget_port:6666"); QVBoxLayout *VLayoutText = new QVBoxLayout(this); VLayoutText->setMargin(4); QWidget *TextWidget = new QWidget(this); TextWidget->setLayout(VLayoutText); m_ReceText = new QTextEdit(TextWidget); m_ReceText->setReadOnly(true); m_SendText = new QTextEdit(TextWidget); m_SendText->setMaximumHeight(100); VLayoutText->addWidget(m_ReceText); VLayoutText->addWidget(m_SendText); QHBoxLayout *HLayoutButton = new QHBoxLayout(this); HLayoutButton->setMargin(4); QWidget *ButtonWidget = new QWidget(this); ButtonWidget->setLayout(HLayoutButton); m_SendButton = new QPushButton(this); m_SendButton->setText(QString("Send").toUtf8().data()); m_CloseButton = new QPushButton(this); m_CloseButton->setText(QString("Close").toUtf8().data()); HLayoutButton->addWidget(m_SendButton); HLayoutButton->addStretch(); HLayoutButton->addWidget(m_CloseButton); QVBoxLayout *VLayoutMain = new QVBoxLayout(this); VLayoutMain->setMargin(2); this->setLayout(VLayoutMain); VLayoutMain->addWidget(TextWidget); VLayoutMain->addWidget(ButtonWidget);}void udpWidOpp::sendData(){ QString str = m_SendText->toPlainText(); m_SendText->clear(); m_UdpSocket->writeDatagram(str.toUtf8(), QHostAddress("127.0.0.1"), quint16(5555));}void udpWidOpp::ReceData(){ char buf[125] = {0}; QHostAddress addr; quint16 port; m_UdpSocket->readDatagram(buf, sizeof(buf), &addr, &port); m_ReceText->setText(QString(buf));}
main函数
#include "udpwid.h"#include "udpwidopp.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); udpWid w; w.show(); udpWidOpp wo; wo.show(); return a.exec();}
阅读全文
1 0
- Qt中的UDP通信
- QT的UDP通信
- Qt-----实现Udp通信
- qt udp 通信
- TCP/UDP通信编程在Qt中的实现方法
- Qt网络与通信-UDP
- Qt Socket通信(UDP&TCP)
- QT之UDP通信总结
- QT 创建UDP Socket通信
- Linux中的UDP通信
- iOS中的UDP通信
- QT中的UDP编程
- QT基础(八)----TCP通信 & UDP通信
- 关于Qt中Udp通信过程中的接收数据部分注意
- 网络编程中的UDP通信
- Qt中的TCP/UDP编程
- 基于QT的UDP协议的通信
- qt编程:windows下的udp通信
- 应用经验 项目 基于51的数据采集系统感想(人文)
- C语言注释转化为C++注释(C语言实现)
- java多线程学习提升(一)
- mint-ui —— navbar的使用
- 《应用拆分与平台搭建最佳实践》- 前言
- Qt中的UDP通信
- python学习之路(2)
- CodeForces
- require入门教程
- 【概念的辨异】—— ISO C 与 POSIX C(C standard library 与 C POSIX library)
- iOS-常见的页面传值方式
- Java日志框架梳理-SLF4J+log4j
- A1027
- 求 TOPK 的三种方法及分析