#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); // 初始化构造函数 server = new QTcpServer; // 监听指定的网卡和端口 // QHostAddress::AnyIPv4 -> 任意 IPV4 地址 // PORT 8000 端口 server->listen(QHostAddress(Local_IP), PORT); ui->Message_Edit->insertPlainText("Message: Local Server " + Local_IP + " is open"); // 判断是否有客户端发起连接 // 如果有客户端发起连接 调用 newClientHandler 函数接收连接 connect(server, &QTcpServer::newConnection, this, &Widget::newClientHandler); } Widget::~Widget() { delete ui; } // 连接成功后执行的槽函数 void Widget::newClientHandler(){ // 建立 TCP 连接 QTcpSocket *socket = server->nextPendingConnection(); // 返回显示客户端的地址和端口号 // socket->peerAddress().toString() 获取客户端地址 QHostAddress 并转换到 QString // QString::number(socket->peerPort()) 获取客户端端口号 Quint16 并转换到 QString ui->IP_Edit->setText(socket->peerAddress().toString()); ui->Port_Edit->setText(QString::number(socket->peerPort())); ui->Message_Edit->insertPlainText("\nConnect to: " + socket->peerAddress().toString()); // 是否有接收到消息 //connect(socket, &QTcpSocket::readyRead, this, &Widget::clientInfoSlot); // 启动线程 // 创建线程对象 myT = new Thread; thread = new QThread(this); // Thread *t = new Thread(socket); // 开始线程 myT->moveToThread(thread); } // 客户端收到消息 //void Widget::clientInfoSlot(){ // 获取信号的发出者 // QTcpSocket *s = (QTcpSocket *)sender(); // 获取系统时间 // QDateTime curremt_date = QDateTime::currentDateTime(); // 获取客户端地址 // QString client_ip = s->peerAddress().toString(); // 读取信息并显示 // ui->Message_Edit->insertPlainText("\nMessage for " + client_ip + " in " + curremt_date.toString("yyyy-MM-dd hh:mm:ss") // + "\n-> " + QString(s->readAll())); //} void Widget::on_ClearButton_clicked() { ui->Message_Edit->clear(); }