QTcpSocket – client[通俗易懂]

QTcpSocket – client[通俗易懂]#include”mainwindow.h”#include”ui_clientWindow.h”#include<QMessageBox>#include<QDateTime>MainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(newUi::clientW…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

#include "mainwindow.h"
#include "ui_clientWindow.h"

#include <QMessageBox>
#include <QDateTime>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::clientWindow)
{ 
   
    ui->setupUi(this);

    init();
    initConnect();
}

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

void MainWindow::slotReadError(QAbstractSocket::SocketError error)
{ 
   
    mTcpClient->disconnectFromHost();
    ui->mConnectButton->setText(QStringLiteral("连接"));
    mSwitch = false;
    QMessageBox msgBox;
    msgBox.setText(tr("failed to connect server because %1").arg(mTcpClient->errorString()));
    msgBox.exec();
}

void MainWindow::slotReadData()
{ 
   
    QByteArray buffer = mTcpClient->readAll();
    if(!buffer.isEmpty())
    { 
   
        ui->mReceiveEdit->append(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));
        ui->mReceiveEdit->append(QString::fromUtf8(buffer));
    }
}

void MainWindow::slotConnectNetwork()
{ 
   
    if(mSwitch)
    { 
      //断开
        mTcpClient->disconnectFromHost();
        if (mTcpClient->state() == QAbstractSocket::UnconnectedState || mTcpClient->waitForDisconnected(1000))  //已断开连接则进入if{}
        { 
   
            ui->mConnectButton->setText(QStringLiteral("连接"));
            ui->mSendButton->setEnabled(false);
        }
        mSwitch = false;
    }
    else
    { 
      //连接
        mTcpClient->connectToHost(ui->mAddrEdit->text(), static_cast<quint16>(ui->mPortEdit->text().toInt()));
        if(mTcpClient->waitForConnected(1000))  // 连接成功则进入if{}
        { 
   
            ui->mConnectButton->setText(QStringLiteral("断开"));
            ui->mSendButton->setEnabled(true);
        }
        mSwitch = true;
    }
}

void MainWindow::slotSendText()
{ 
   
    QString data = ui->mSendTextEdit->toPlainText();
    if(data.simplified().size())
    { 
   
        mTcpClient->write(data.toUtf8());
    }
    ui->mSendTextEdit->clear();
}

void MainWindow::init()
{ 
   
    setWindowTitle(QStringLiteral("Client"));

    mTcpClient = new QTcpSocket(this);   //实例化tcpClient
    mTcpClient->abort();                 //取消原有连接

    ui->mSendButton->setEnabled(false);
}

void MainWindow::initConnect()
{ 
   
    connect(mTcpClient, &QTcpSocket::readyRead, this,&MainWindow::slotReadData);
    connect(mTcpClient, SIGNAL(error(QAbstractSocket::SocketError)),
            this, SLOT(slotReadError(QAbstractSocket::SocketError)));


    connect(ui->mConnectButton,&QPushButton::clicked,this,&MainWindow::slotConnectNetwork);
    connect(ui->mClearButton,&QPushButton::clicked,this,[this](){ 
   ui->mReceiveEdit->clear();});
    connect(ui->mSendButton,&QPushButton::clicked,this,&MainWindow::slotSendText);
}

在这里插入图片描述

源码链接 Client

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/195503.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 前端之路:bootstrap 时间日期日历控件(datetimepicker)

    前端之路:bootstrap 时间日期日历控件(datetimepicker)Bootstrap datetimepicker控件的使用1.支持日期选择,格式设定2.支持时间选择3.支持时间段选择控制4.支持中文涉及的样式及js:云加速外联即可。(moment-with-locales.js 这个得在datatimpicker.min.js之前。可以网上百度这个文件。我没找到这个cdn)&lt;linkhref="https://cdn.b…

    2025年7月26日
    6
  • 前端vue面试题2021_vue 面试题 2021

    前端vue面试题2021_vue 面试题 2021一.自我介绍(我是谁来自哪里,今天来的目的,面试的岗位是什么,几年的工作经验,掌握的技术栈有哪些,开发过什么项目,项目中负责的板块是什么)面试官您好!我叫XXX,来自XXX,很荣幸能来我们公司面试,我从事前端开发有3年了,目前掌握的技术有html,css,js,ajax,vue,小程序,参与过各种类型的项目。我做过的项目有A,B,C,D,E那么最近做的一个项目是XXX在这个项目中我主要负责的板块是XXX面试官您这边还有什么想要了解的么。二.项目功能提问vue后台项目(这几个功能点要求

    2025年10月5日
    4
  • Day.js 1.8.12 发布,轻量级时间和日期 JavaScript 库

    Day.js 1.8.12 发布,轻量级时间和日期 JavaScript 库Day.js 1.8.12 发布,轻量级时间和日期 JavaScript 库

    2022年4月21日
    57
  • 虚拟机VMware安装苹果系统macOS,超级详细教程,附文件下载,真教程!!

    虚拟机VMware安装苹果系统macOS,超级详细教程,附文件下载,真教程!!1.准备工作1、虚拟机VMware®Workstation15Pro,小编使用的版本是15pro2、Unlocker或MK-Unlocker3、一个MacOS镜像2.资源下载…

    2022年9月25日
    4
  • JDK 安装与环境变量配置(Win10详细版)

    JDK 安装与环境变量配置(Win10详细版)前言为什么写这篇文章呢,因为我不想再去百度搜别人的文章了,所以自己写一篇以作记录。准备工作JDK8下载地址一个JDK安装程序,这是是1.8版本,因为新的JDK版本都没有什么很大的亮点,如下图所示,安装鼠标双击运行,选择“是”,然后如下图:点击下一步:我在这里并不修改JDK的安装路径,所以无需改动,点击下一步:安装过程中会弹出jre的安装提示框,如下所示:这里无需…

    2022年6月9日
    33
  • php header函数导出excel表格

    php header函数导出excel表格

    2021年10月26日
    64

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号