/***************************************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***********************************/