基于QT实现的TCP连接的网络通信(客户端)

上篇介绍了QT实现网络通信的服务器端,还没看服务器的朋友们先去上篇了解,这篇我来实现一下客户端的实现。

首先还是新建一个项目

选择mainwindow类

在通信前将.pro文件的第一行代码中追加network

窗口搭建

在mainwindow.ui中完成一下窗口的搭建

首先在最上端放一个QWidget 在里面放入label 输入端口 ,再放一个LineEdit ,它的Objectname 为port 表示输入的端口号,在右边放一个Pushbutton 输入连接,Objectname 是connect

端口下面类似,LineEdit的Objectname是ip ,PushButton的Objectname是disconnect

然后在下面放一个QGroupBox,name改为历史信息 表示服务器客户端发送的信息都会保存在这,在里面放一个TextEdit,Objectname改为record 再水平布局

下面类似,TextEdit的Objectname改为msg表示服务器要发送的信息,每次点击发送清空发送的信息框中的内容

最下面还是先放一个QGroupBox,中间放一个pushbutton输入发送,Objectname改为**sendMsg,**再水平布局

最后整体 垂直布局,这样服务器的窗口就搭建成功了

代码部分

mainwindow.h

首先在头文件的类中的private中定义 要用到的套接字

槽函数,在Ui中的按钮右键转到槽函数,自动定义,用来实现连接 ,断开连接 ,发送等功能

mianwindow.cpp

在构造函数中对ui中的端口号、ip进行初始化,设置窗口标题为客户端,在未连接的时候将断开连接设置为不可使用;对头文件中定义的套接字进行实例化

三个connect,还是写在构造函数中;

第一个connct:如果服务器有消息发来,套接字就会收到一个readyRead的信号,使用匿名函数将发送来的内容追加到record中

第二个connect : 如果客户端连接到服务器,套接字就会收到connect的信号,使用匿名函数将成功连接发送到record中,如果连接成功就将连接按钮 设置为不可操作,将断开连接按钮设置为可以操作

第三个connect :如果客户端与服务器断开连接,套接字会收到disconnect的信号,使用匿名函数将服务器已断开发送到record中,并将套接字关闭释放,如果断开就将连接按钮 设置为可操作,将断开连接按钮 设置为不可操作

点击按钮的三个槽函数的实现

点击senMsg 就将msg文本框中的内容利用套接字write给服务器,然后再追加到record文本框中

点击connecr 将ip和端口号保存,利用套接字中的connectToHost函数与服务器进行连接

点击disconnect 将tcp套接字关闭,将连接按钮设置为可操作,断开连接设置为不可操作

通过以上步骤客户端也就实现完成了,以下是全部代码

全部代码

mianwindow.h

cpp 复制代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTcpSocket>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:


    void on_sendMsg_clicked();

    void on_connect_clicked();

    void on_disconnect_clicked();

private:
    Ui::MainWindow *ui;
    QTcpSocket *tcp;

};

#endif // MAINWINDOW_H

mianwindow.cpp

cpp 复制代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QHostAddress>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->port->setText("8899");
    ui->ip->setText("127.0.0.1");
    setWindowTitle("客户端");
    ui->disconnect->setDisabled(true);

    tcp = new QTcpSocket(this);

    connect(tcp,&QTcpSocket::readyRead,this,[=](){//如果tcp收到一个readyRead信号就
          QByteArray data = tcp->readAll();//把内容读出来放到data里
          ui->record->append("服务器say:" + data);//把内容追加到record中
      });

    connect(tcp,&QTcpSocket::connected,this,[=](){//如果套接字收到已连接消息,将成功连接发送到record中
        ui->record->append("成功连接服务器!");
         ui->disconnect->setDisabled(false);
         ui->connect->setDisabled(true);
    }) ;


    connect(tcp,&QTcpSocket::disconnected,this,[=](){//如果套接字收到断联消息,就关闭套接字并释放
        ui->record->append("服务器已断开!");
        tcp->close();
        tcp->deleteLater();

        ui->disconnect->setDisabled(true);
        ui->connect->setDisabled(false);
    }) ;

}

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

void MainWindow::on_sendMsg_clicked()
{
    QString msg = ui->msg->toPlainText();
    tcp->write(msg.toUtf8());
    ui->record->append("客户端say:" + msg);
    ui->msg->clear();
}

void MainWindow::on_connect_clicked()
{
    QString ip = ui->ip->text();//将ip地址赋值
    unsigned short port = ui->port->text().toUShort();//将端口号赋值
    tcp->connectToHost(QHostAddress(ip),port); //connecttoHost函数用来连接服务器
}

void MainWindow::on_disconnect_clicked()
{
    tcp->close();
    ui->disconnect->setDisabled(true);
    ui->connect->setDisabled(false);
}

执行实例

相关推荐
liangshanbo121531 分钟前
面试题:HTTP/2有哪些升级
网络·网络协议·http
张小姐的猫32 分钟前
【AI大模型接入SDK】 —— 前端页面 & 项目总结与拓展
前端·数据结构·数据库·c++·人工智能·chatgpt
兴通物联科技34 分钟前
对俄出口诚实标识 2026 时间节点与产线赋码采集技术方案
大数据·服务器·单片机·嵌入式硬件·深度学习·计算机视觉
web打印社区35 分钟前
远程打印:WebSocket 与 HTTP 轮询怎么选
前端·vue.js·websocket·网络协议·http·electron·pdf
VidDown36 分钟前
从一堆脚本到能维护的系统:视频处理管道的工程化
服务器·ffmpeg·音视频·视频编解码
William Dawson39 分钟前
kkFileView 内网 ARM 服务器全链路部署:从「找不到 office」到全绿通关(超详细排障实录)
运维·服务器
AC赳赳老秦1 小时前
财报附注表格精准提取:OpenClaw 从 PDF 年报附注挖掘隐藏明细,补齐财务分析维度
java·汇编·c++·python·青少年编程·deepseek·openclaw
欧特克_Glodon1 小时前
OpenCV计算机视觉开发入门与实践(基于C++):专栏内容介绍及目录
c++·人工智能·opencv·计算机视觉
箓维1 小时前
线程的优缺点,与进程的关联和差异
java·服务器·笔记
不会就选b1 小时前
Linux之http会话
服务器·网络协议·http