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)
上一篇 2025年10月15日 下午11:22
下一篇 2025年10月16日 上午7:01


相关推荐

  • 罗技键盘k380打不了字_罗技k380键盘配对成功后无法使用

    罗技键盘k380打不了字_罗技k380键盘配对成功后无法使用mac连接成功罗技k380键盘,但是发现数字键上面的字符对不上,很多字符以及标点符号都打不出来,是什么原因导致的呢?问题分析首先,分析一下,到底是什么原因导致的?可以连接其他设备试一试,比如我发现k380键盘在我的ipad上是可以正常使用的。那么就排除了键盘本身存在问题,坏了等猜测。如果不是键盘本身出了问题,那么我们就要去分析问题究竟出现在哪里?联系了客服,加上自己对键盘配对过程的回顾,大致判定问题出现在最开始的匹配的时候,选错了【键盘类型】。解决问题-重设【键盘类型】步骤如下:【系统偏好设置

    2022年10月9日
    3
  • ocx签名

    ocx签名【工具路径】C:\ProgramFiles(x86)\MicrosoftVisualStudio8\Common7\Tools\Bin【生成证书和密钥】Makecert-svxxx.pvk-r-n”CN=xxx”xxx.cer【签名过程】[1]Cert2spcxxx.cerxxx.spc[2]pvk2pfx-pvkxxx.pvk-piPAS…

    2022年7月13日
    15
  • 海康SDK接口调用的主要流程

    海康SDK接口调用的主要流程SDK 接口调用的主要流程 初始化 SDK 功能 对整个网络 SDK 系统的初始化 内存预分派等操作 声明 BOOLNET DVR Init 返回值 TRUE 表示成功 FALSE 表示失败 接口返回失败请调用 NET DVR GetLastError 获取错误码 通过错误码判断出错原因 设置连接超时时间功能这部分为可选 用于设置 SDK 中的网络连接超时时间 用户可以根据

    2026年3月17日
    2
  • 使用GCC编译程序常用命令

    使用GCC编译程序常用命令一 编译器驱动程序首先梳理一下源文件到可执行文件的整个过程 下面是两个源文件的组成 main c 和 sum c main cintsum int a intn intarray 2 1 2 intmain intval sum array 2 returnval sum cintsum int a intn inti s 0 for i 0 i

    2026年3月17日
    2
  • Charles激活成功教程方法

    Charles激活成功教程方法Charles 主要用于手机和 PC 之间的代理 过期后会导致很多麻烦 比如启动延迟 使用时间限制等 今天介绍下激活成功教程方法 快速方便 1 安装 Charles 下载或者确认 Charles 的版本号 官方下载地址 https www charlesproxy com download 基于自己需求下载安装过程忽略 2 激活成功教程

    2026年3月19日
    2
  • influx连接参数设置

    influx连接参数设置influxArgume Listthemwith influxhelp Thelistbelow Weprovidedet execute format and importatthee

    2026年3月20日
    2

发表回复

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

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