/***************************************header file***********************************/
#ifndef WIDGET_H
#define WIDGET_H
#include <QtGui>
#include <QtCore>
#include <QtNetwork>
class Widget : public QWidget
{
Q_OBJECT
private:
QTextEdit* m_teShow;
QTextEdit* m_teSend;
QPushButton* m_btnSend;
QUdpSocket* m_socket;
const static quint16 port = 512;
public:
Widget(QWidget *parent = 0);
~Widget();
private slots:
void readData();
void sendData();
};
#endif // WIDGET_H
/***************************************header file***********************************/
/***************************************source file***********************************/
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB18030"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB18030"));
QVBoxLayout* layout = new QVBoxLayout(this);
QHBoxLayout* l = new QHBoxLayout;
m_teShow = new QTextEdit(this);
m_teShow->setAcceptRichText(true);
m_teShow->setFixedSize(340,200);
m_teSend = new QTextEdit(this);
m_teSend->setFixedSize(300,100);
m_btnSend = new QPushButton(tr("Send"),this);
m_btnSend->setFixedSize(40,100);
connect(m_btnSend,SIGNAL(clicked()),this,SLOT(sendData()));
l->addWidget(m_teSend);
l->addWidget(m_btnSend);
layout->addWidget(m_teShow);
layout->addLayout(l);
this->setLayout(layout);
m_socket = new QUdpSocket(this);
bool result = m_socket->bind(port);
if(!result)
{
QMessageBox::critical(0,"error","Bind Error!");
return;
}
connect(m_socket,SIGNAL(readyRead()),this,SLOT(readData()));
}
Widget::~Widget()
{
}
void Widget::readData()
{
if(m_socket)
while (m_socket->hasPendingDatagrams())
{
QByteArray datagram;
datagram.resize(m_socket->pendingDatagramSize());
m_socket->readDatagram(datagram.data(), datagram.size());
QString msg=datagram.data();
if(msg.left(15).contains(QNetworkInterface::allAddresses().value(0).toString()))
{
continue;
}
m_teShow->append(msg);
}
}
void Widget::sendData()
{
QString msg = m_teSend->toPlainText();
m_teSend->clear();
int length = 0;
if(msg == "")
{
return;
}
msg.prepend(QNetworkInterface::allAddresses().value(0).toString()+" "+QTime::currentTime().toString("hh:mm:ss")
+"\r\n");
msg.append("\r\n");
m_teShow->append(msg);
QByteArray ba;
ba.append(msg);
if((length=m_socket->writeDatagram(ba,QHostAddress::Broadcast, port))!=msg.length())
{
return ;
}
}
/***************************************source file***********************************/
转载于:https://blog.51cto.com/no001/411988
本文介绍了一个简单的UDP聊天程序的设计与实现过程。该程序使用Qt框架进行开发,通过QUdpSocket类实现UDP通信,允许用户发送和接收消息。文章详细展示了程序的类结构、主要功能及其实现代码。
993

被折叠的 条评论
为什么被折叠?



