先看下效果图:
server端,只能接收数据:http://blog.chinaunix.net/photo/116111_101004192628.jpg
client端,发送数据,并显示在上面的text中:
代码实现:
server端代码:
server::server(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::server)
{
ui->setupUi(this);
QMainWindow(parent),
ui(new Ui::server)
{
ui->setupUi(this);
this->setWindowTitle("QQ2011-UDP");
//绑定套接字
udpSocket = new QUdpSocket;
udpSocket->bind(QHostAddress("219.229.140.239"), 8888);
QObject::connect(udpSocket, SIGNAL(readyRead()), this, SLOT(processReadData()));
}
udpSocket->bind(QHostAddress("219.229.140.239"), 8888);
QObject::connect(udpSocket, SIGNAL(readyRead()), this, SLOT(processReadData()));
}
server::~server()
{
delete ui;
}
{
delete ui;
}
void server::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
//socket有数据可读时触发的槽函数
void server::processReadData()
{
time = QDateTime(QDateTime::currentDateTime());
QString timeString = time.toString("hh:mm:ss");
ui->messagetextEdit->append(timeString);
{
time = QDateTime(QDateTime::currentDateTime());
QString timeString = time.toString("hh:mm:ss");
ui->messagetextEdit->append(timeString);
qint64 size = udpSocket->pendingDatagramSize();
qDebug()<<"size = " <<size;
char data[size];
udpSocket->readDatagram(data, size, 0, 0);
QByteArray array(data, size);
QString datastring(array);
ui->messagetextEdit->append(datastring);
}
client端代码:
qDebug()<<"size = " <<size;
char data[size];
udpSocket->readDatagram(data, size, 0, 0);
QByteArray array(data, size);
QString datastring(array);
ui->messagetextEdit->append(datastring);
}
client端代码:
client::client(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::client)
{
ui->setupUi(this);
QMainWindow(parent),
ui(new Ui::client)
{
ui->setupUi(this);
this->setWindowTitle("QQ2011-UDP");
//绑定套接字
udpSocket = new QUdpSocket;
udpSocket->bind(QHostAddress("219.229.140.239"), 9999);
}
udpSocket->bind(QHostAddress("219.229.140.239"), 9999);
}
client::~client()
{
delete ui;
}
{
delete ui;
}
void client::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
//send按钮槽函数
void client::on_sendButton_clicked()
{
this->processSendMessage();
}
{
this->processSendMessage();
}
//message发送的处理函数
void client::processSendMessage()
{
if (ui->sendMessagetextEdit->toPlainText().isEmpty() == false)
{
time = QDateTime(QDateTime::currentDateTime());
QString timeString = time.toString("hh:mm:ss");
ui->messagetextEdit->append(timeString);
{
if (ui->sendMessagetextEdit->toPlainText().isEmpty() == false)
{
time = QDateTime(QDateTime::currentDateTime());
QString timeString = time.toString("hh:mm:ss");
ui->messagetextEdit->append(timeString);
QString senderName = "farsight:\n";
QByteArray arrayData((senderName + ui->sendMessagetextEdit->toPlainText()).toAscii());
udpSocket->writeDatagram(arrayData, QHostAddress("219.229.140.239"), 8888);
QString datastring(ui->sendMessagetextEdit->toPlainText());
qDebug()<<"size" <<arrayData.size();
ui->messagetextEdit->append(datastring);
ui->sendMessagetextEdit->clear();
}
else
{
QMessageBox::information(this, "ERROR Message", "please input message to send");
}
}
QByteArray arrayData((senderName + ui->sendMessagetextEdit->toPlainText()).toAscii());
udpSocket->writeDatagram(arrayData, QHostAddress("219.229.140.239"), 8888);
QString datastring(ui->sendMessagetextEdit->toPlainText());
qDebug()<<"size" <<arrayData.size();
ui->messagetextEdit->append(datastring);
ui->sendMessagetextEdit->clear();
}
else
{
QMessageBox::information(this, "ERROR Message", "please input message to send");
}
}