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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【Tensorflow】安装支持AVX2指令集的Tensorflow「建议收藏」

    【Tensorflow】安装支持AVX2指令集的Tensorflow「建议收藏」主要依据:https://github.com/fo40225/tensorflow-windows-wheel在ReadMe中找到满足自己需求的版本我用的是:打开文件夹,获取其下载链接:https://github.com/fo40225/tensorflow-windows-wheel/blob/master/1.13.1/py37/CPU/avx2/tensorflow-1.13…

    2022年5月29日
    58
  • MYSQLServer2008R2详细的图文安装教程

    MYSQLServer2008R2详细的图文安装教程本文主要总结了在win7系统上安装Mysql_Server2008(64位)的详细图文教程,具体的安装步骤如下所示:MysqlServer2008R2企业版下载地址:(直接打开链接,默认用的是迅雷下载,里面自带序列号)ed2k://|file|cn_sql_server_2008_r2_enterprise_x86_x64_ia64_dvd_522233.iso|4662884352|1D…

    2022年7月27日
    12
  • 推荐几个IDEA插件,Java开发者撸码利器

    推荐几个IDEA插件,Java开发者撸码利器点击上方“Java之间”,选择“置顶或者星标”你关注的就是我关心的!来源:www.cnblogs.com/jimoer/p/8799437.html#上一篇:Java8很香但还是想升级到…

    2022年8月22日
    12
  • linux文件复制和移动[通俗易懂]

    linux文件复制和移动[通俗易懂]linux文件复制和移动    文件复制cp(copy)    命令格式:cpsrcdest    cpfile1file2file3(多文件时,最后面是dest,其他都是src)    允许出现的情况是:        1.复制一个文件到一个文件        2.复制多个文件到一个目录    案例:    a.将文件复制到文件夹下,保

    2022年9月28日
    2
  • Windows Server 2012 R2/2016 此工作站和主域间的信任关系失败[通俗易懂]

    Windows Server 2012 R2/2016 此工作站和主域间的信任关系失败[通俗易懂]今天给客户Exchange服务器出现了脱域的情况,当使用域帐户登录时出现了“此工作站和主域间的信任关系失败”的情况。造成这种的可能原因:域内存在了多台SID一样的计算机;计算机对象在AD中意外删除;客户端的帐户密码更新失败;时间超过5分钟;AD复制问题等等;计算机登录现象:解决方法:首先确认在ActiveDirectory的ComputersOU(其他OU也可以)中存在该计算机对象;使用服务器的本地管理员(.\administrator)登录计算机;使用本地管理…

    2022年10月19日
    2
  • 8.app后端和web后端的区别

    8.app后端和web后端的区别很多从web后端转到app后端的小伙伴经常很茫然,不知道这两者之间有啥区别。本文通过例子,分析web后端和app后端的区别,使各位更好地把握app后端的架构。

    2022年6月22日
    57

发表回复

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

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