You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.0 KiB
76 lines
2.0 KiB
2 years ago
|
#include "widget.h"
|
||
|
#include "ui_widget.h"
|
||
|
#include<QMessageBox>
|
||
|
|
||
|
Widget::Widget(QWidget *parent) :
|
||
|
QWidget(parent),
|
||
|
ui(new Ui::Widget)
|
||
|
{
|
||
|
ui->setupUi(this);
|
||
|
//创建对象
|
||
|
tcpServer = new QTcpServer(this);
|
||
|
tcpSocket = new QTcpSocket(this);
|
||
|
|
||
|
//2.有新连接时创建tcpSocket
|
||
|
connect(tcpServer,SIGNAL(newConnection()),this,SLOT(newConnection_Slot()));
|
||
|
}
|
||
|
|
||
|
Widget::~Widget()
|
||
|
{
|
||
|
delete ui;
|
||
|
}
|
||
|
|
||
|
//打开服务器
|
||
|
void Widget::on_btnOpenServer_clicked()
|
||
|
{
|
||
|
//1.打开监听,所有地址,端口由输入框设定
|
||
|
if(tcpServer->listen(QHostAddress::Any,ui->tcpPort->text().toUInt())){
|
||
|
QMessageBox::information(this,"提示","正在监听");
|
||
|
}else{
|
||
|
QMessageBox::critical(this,"提示","失败");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//有新连接时创建tcpsocket
|
||
|
void Widget::newConnection_Slot(){
|
||
|
if(tcpServer->hasPendingConnections()){
|
||
|
ui->messageRCV->appendPlainText("a client has connected!");
|
||
|
}
|
||
|
//2.调用`nextPendingConnection()`来接受待处理的连接。返回一个连接的`QTcpSocket()`
|
||
|
tcpSocket = tcpServer->nextPendingConnection();
|
||
|
//3.有数据时,读取tcpSocket数据
|
||
|
connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readyRead_SLOT()));
|
||
|
}
|
||
|
|
||
|
//3.有数据时,读取tcpSocket数据
|
||
|
void Widget::readyRead_SLOT(){
|
||
|
QString buff;
|
||
|
buff = tcpSocket->readAll();
|
||
|
ui->messageRCV->appendPlainText(buff);
|
||
|
}
|
||
|
|
||
|
//4.关闭服务器
|
||
|
void Widget::on_btnCloseServer_clicked()
|
||
|
{
|
||
|
tcpServer->disconnect();
|
||
|
tcpServer->close();
|
||
|
if(tcpServer->isListening()){
|
||
|
QMessageBox::information(this,"提示","监听中。。");
|
||
|
}else{
|
||
|
QMessageBox::information(this,"提示","停止监听");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//5.发送数据
|
||
|
void Widget::on_btnSendMessage_clicked()
|
||
|
{
|
||
|
//toLocal8Bit()转化为字符数组,data()转化为字符指针
|
||
|
tcpSocket->write(ui->editMessageSend->text().toLocal8Bit().data());
|
||
|
}
|
||
|
|
||
|
void Widget::on_btnCloseNow_clicked()
|
||
|
{
|
||
|
tcpSocket->close();
|
||
|
QMessageBox::information(this,"提示","已断开当前连接,继续监听中。。");
|
||
|
}
|