#include"server.h"
创新互联建站主要从事成都网站制作、成都网站建设、外贸营销网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务方正,10多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
#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,其实两台机器之间通信,是不用服务器的,只要在一个网段内就可以;
文章标题:qt之UDP通信代码以及解释
文章来源:http://jkwzsj.com/article/ihjspd.html