linux下qt实现UDP通信,qt 之 UDP通信代码以及解释

这个博客展示了如何在C++中利用QUdpSocket类实现一个简单的UDP服务器,主要功能包括接收和发送数据报。代码中展示了如何绑定端口、读取数据报、解析消息并显示在界面上,以及如何打包和发送消息。该实现适用于局域网内的两台机器进行通信,无需服务器,只要在同一网段即可。
摘要由CSDN通过智能技术生成

#include"server.h"

#include"ui_server.h"

Server::Server(QWidget*parent):

QWidget(parent),

ui(newUi::Server)

{

port=666;

socket=newQUdpSocket(this);      在.h文件中包含了QUdpSocket类,在工程中增加了network,socket是在.h文件中定义的指针;

//根据系统的不同,导致绑定的模式时不同的,通过条件编译选择模式;

#ifdefQ_OS_LINUX

socket->bind(port,QUdpSocket::ShareAddress);

#else//Q_OS_WIN32

socket->bind(port,QUdpSocket::ReuseAddressHint);

#endif

connect(socket,SIGNAL(readyRead()),

this,SLOT(readPendingDatagrams()));

ui->setupUi(this);

}

Server::~Server()

{

deleteui;

}

voidServer::readPendingDatagrams()   //开始读数据;

{

while(socket->hasPendingDatagrams())

{

QByteArraydatagram;

datagram.resize(socket->pendingDatagramSize());   //通过socket获取数据包的长度;

socket->readDatagram(datagram.data(),datagram.size());

decodeMessage(datagram);   //解析消息;

}

}

voidServer::decodeMessage(constQByteArray&ba)

{

QDataStreamstream(ba);

QStringnick,message;

stream>>nick>>message;   //先读出第一个字符串,赋给nick(就是名字),第二个赋给消息内容;

showMessage(nick,message);

}

//用于打包消息;

QByteArrayServer::encodeMessage(constQString&nick,constQString&message)const

{

QByteArrayba;

QDataStreamstream(&ba,QIODevice::WriteOnly);

stream<

returnba;

}

voidServer::sendMessage()

{

QByteArrayba=encodeMessage(ui->ui_username->text(),   //获取使用者名字;

ui->textEdit->toPlainText());   //获取消息;

socket->writeDatagram(ba,QHostAddress::Broadcast,port);//初始化数据报;

}

voidServer::showMessage(constQString&nick,constQString&message)

{

QStringline=tr("%1says:%2").arg(nick).arg(message);

ui->textBrowser->append(line);

ui->textEdit->clear();

}

voidServer::on_pushButton_clicked()

{

sendMessage();

}

这里仅仅是.cpp文件,是核心的逻辑部分,至于其他部分,希望读者自己完成;

上文用到类名是Server,其实两台机器之间通信,是不用服务器的,只要在一个网段内就可以;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值