代码复现|QT快速入门 (课程来自B站)--其七

自己跟着老师的课程一步步跟着写下来的,有需要的可以自取,有用的话还希望点一个小小的赞同哦~

视频连接专栏的前几篇文章有,此处就不再冗余的放了(其实就是懒得粘贴链接了~~~)

七、TCP 服务器

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTcpServer>
#include <QTcpSocket>

#define PORT 8000  //定义宏,端口号

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void newClientHandler();
    void clientInfoSlot();  //客户端消息的槽函数

private:
    Ui::Widget *ui;
    QTcpServer *server;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    server = new QTcpServer;

    server->listen(QHostAddress::AnyIPv4, PORT);  //两个参数,监听哪个网卡,监听的端口号

    //客户端发起连接,server发出信号
    connect(server,&QTcpServer::newConnection,this,&Widget::newClientHandler);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::newClientHandler()
{
    // 建立TCP连接,返回QTcpSocket类型的地址,所以创建一个指针socket,IP地址和端口号都保存在socket里面
    QTcpSocket *socket = server->nextPendingConnection();
//    socket->peerAddress();  //获取客户端的地址
//    socket->peerPort();  // 获取端口号

    //打印客户端信息
    ui->ipLineEdit->setText(socket->peerAddress().toString());
    ui->portLineEdit->setText(QString::number(socket->peerPort()));

    //服务器收到客户端发送的信息,socket发出 readyread 信号
    connect(socket,&QTcpSocket::readyRead,this,&Widget::clientInfoSlot);
}

void Widget::clientInfoSlot()
{
    //在此函数中获取 newClientHandler 函数里面的局部变量 socket
    QTcpSocket *s = (QTcpSocket *)sender();  //槽函数中调用sender 可以获取信号的发出者。  强转一个新类型
    ui->mainLineEdit->setText(QString(s->readAll()));
//    mainLineEdit 类型在此路径文件中 D:\QT\Qtproject\QtOnline\build-TcpServer-Desktop_Qt_5_14_2_MinGW_32_bit-Debug\ui_widget.h
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值