/**
* 书本:【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