/** * 书本:【Qt5开发及实例】 * 功能:实现客户端的编程 * 文件:udpclient.h * 时间:2015年2月5日22:10:30 * 作者:cutter_point */ #ifndef UDPCLIENT_H #define UDPCLIENT_H #include <QDialog> #include <QVBoxLayout> #include <QTextEdit> #include <QPushButton> #include <QUdpSocket> class UdpClient : public QDialog { Q_OBJECT public: UdpClient(QWidget *parent = 0, Qt::WindowFlags f = 0); ~UdpClient(); public slots: void CloseBtnClicked(); void dataReceived(); private: QTextEdit *ReceiveTextEdit; QPushButton *CloseBtn; QVBoxLayout *mainLayout; int port; //端口号 QUdpSocket *udpSocket; //套接字 }; #endif // UDPCLIENT_H
/** * 书本:【Qt5开发及实例】 * 功能:实现客户端的编程 * 文件:udpclient.cpp * 时间:2015年2月5日22:10:30 * 作者:cutter_point */ #include "udpclient.h" #include <QMessageBox> #include <QHostAddress> UdpClient::UdpClient(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f) { setWindowTitle(tr("UDP Client")); ReceiveTextEdit = new QTextEdit(this); CloseBtn = new QPushButton(tr("Close"),this); mainLayout=new QVBoxLayout(this); mainLayout->addWidget(ReceiveTextEdit); mainLayout->addWidget(CloseBtn); //初始化界面结束 connect(CloseBtn, SIGNAL(clicked()), this, SLOT(CloseBtnClicked())); //关闭 port = 5555; //端口号 udpSocket = new QUdpSocket(this); connect(udpSocket, SIGNAL(readyRead()), this, SLOT(dataReceived())); //收集数据,电报 bool result = udpSocket->bind(port); //把udpSocket绑定到相应的端口 if(!result) //result为false的话,那么就进行下面的,也就是绑定失败 { QMessageBox::information(this, tr("error"), tr("udp socket create error!")); //udp协议套接字创建失败 return; } } //void CloseBtnClicked(); void UdpClient::CloseBtnClicked() { this->close(); //关闭窗口 } //void dataReceived(); void UdpClient::dataReceived() { while(udpSocket->hasPendingDatagrams()) //如果有数据报的话 { QByteArray datagram; //字节流 datagram.resize(udpSocket->pendingDatagramSize()); //里面那个获得第一个数据报的长度,设定字节流的长度 udpSocket->readDatagram(datagram.data(), datagram.size()); //读取相应长度的数据报到datagram QString msg = datagram.data(); //得到字节流的数据 ReceiveTextEdit->insertPlainText(msg); //显示在界面上 } } UdpClient::~UdpClient() { }
然后是客户端和服务器端,自己可以改一下地址在两台机器上联网运行,或者就在一台机器上,用同样的本地地址运行:
原文:http://blog.csdn.net/cutter_point/article/details/43973269