整体效果图如下:



1、tcpclient.h


#ifndef TCPCLIENT_H
#define TCPCLIENT_H#include <QWidget>
#include <QPushButton>
#include <QTextEdit>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QTcpSocket>
#include <QCheckBox>
#include <QLineEdit>
#include <QLabel>
#include <QTimer>class TcpClient : public QWidget
{Q_OBJECT
public:TcpClient(QWidget *parent = 0);QTcpSocket *tcpsocket;QTimer *timer;int state;void getShow();void connect_to_server(QString IP,int Port);//连接服务器void setText_to_show(QString m);public slots:void press_send();void CheckBox_state(int arg1);void time_during();protected:QPushButton *Btn_cnt,*Btn_discnt,*Btn_send;QTextEdit *EditShow;QHBoxLayout *HLayout;QHBoxLayout *HLayout1;QVBoxLayout *VLayout;QVBoxLayout *VLayout1;QCheckBox *CheckBox;QLineEdit *time_space;QLabel *lable;};#endif // TCPCLIENT_H

2、tcpclient.c


#include "tcpclient.h"
#include <thread.h>TcpClient::TcpClient(QWidget *parent): QWidget(parent)
{EditShow = new QTextEdit;Btn_send = new QPushButton(tr("发送"));time_space = new QLineEdit(tr("1000"));CheckBox = new QCheckBox(tr("自动发送"));lable = new QLabel(tr("发送间隔:"));HLayout = new QHBoxLayout;HLayout1 = new QHBoxLayout;VLayout = new QVBoxLayout;VLayout1 = new QVBoxLayout;tcpsocket = new QTcpSocket;HLayout1->addWidget(lable);HLayout1->addWidget(time_space);VLayout1->addWidget(CheckBox);VLayout1->addLayout(HLayout1);HLayout->addWidget(Btn_send);HLayout->addLayout(VLayout1);VLayout->addWidget(EditShow);VLayout->addLayout(HLayout);this->setLayout(VLayout);timer = new QTimer;connect(timer,SIGNAL(timeout()),this,SLOT(time_during()));connect(Btn_send,SIGNAL(clicked(bool)),this,SLOT(press_send()));connect(CheckBox,SIGNAL(stateChanged(int)),this,SLOT(CheckBox_state(int arg1)));//    Thread *t = new Thread;
//    t->socket=tcpsocket;
//    t->start();}void TcpClient::connect_to_server(QString IP,int Port)
{tcpsocket->connectToHost(IP,Port);
}void TcpClient::setText_to_show(QString m)
{this->EditShow->setText(m);
}void TcpClient::CheckBox_state(int arg1)
{if(arg1!=0)state=true;elsestate=false;
}void TcpClient::time_during()
{QByteArray m = EditShow->toPlainText().toUtf8();tcpsocket->write(m);
}void TcpClient::press_send()
{if(state){QString send_time = time_space->text();timer->start(send_time.toInt());}else{timer->stop();QByteArray m = EditShow->toPlainText().toUtf8();tcpsocket->write(m);}}

3、clientui.h


#ifndef CLIENTUI_H
#define CLIENTUI_H#include <QDialog>
#include <QDebug>
#include <QGridLayout>
#include <QWidget>
#include <QTimer>
#include <QVector>
#include <QCloseEvent>
#include <tcpclient.h>
#include <QStringList>namespace Ui {class ClientUI;
}class ClientUI : public QDialog
{Q_OBJECTpublic:explicit ClientUI(QWidget *parent = 0);~ClientUI();int Client_Number;QTimer *timer;QVector<QTcpSocket *> T;QVector<QByteArray> msg;public slots:void receiveClientNum(QString IP,QString Port,int ClientNum,QString Message,bool state,QString time);void timer_doing();private slots:void on_pushButton_upPage_clicked();void on_pushButton_downPage_clicked();void on_pushButton_goto_clicked();private:Ui::ClientUI *ui;void closeEvent(QCloseEvent *event);
};#endif // CLIENTUI_H

4、clientui.c


#include "clientui.h"
#include "ui_clientui.h"ClientUI::ClientUI(QWidget *parent) :QDialog(parent),ui(new Ui::ClientUI)
{ui->setupUi(this);
}ClientUI::~ClientUI()
{delete ui;
}void ClientUI::on_pushButton_upPage_clicked()//上一页
{ui->pushButton_downPage->setEnabled(true);int CurrentPage=ui->stackedWidget->currentIndex();if(CurrentPage-1>=0){ui->stackedWidget->setCurrentIndex(CurrentPage-1);ui->CurrentPage->setText("当前页:"+QString::number(CurrentPage));}elseui->pushButton_upPage->setEnabled(false);
}void ClientUI::on_pushButton_downPage_clicked()//下一页
{ui->pushButton_upPage->setEnabled(true);int TotalPage=ui->stackedWidget->count();int CurrentPage=ui->stackedWidget->currentIndex();if(CurrentPage+1<TotalPage){ui->stackedWidget->setCurrentIndex(CurrentPage+1);ui->CurrentPage->setText("当前页:"+QString::number(CurrentPage+2));}elseui->pushButton_downPage->setEnabled(false);
}void ClientUI::on_pushButton_goto_clicked()//跳转页
{ui->pushButton_upPage->setEnabled(true);ui->pushButton_downPage->setEnabled(true);int TotalPage=ui->stackedWidget->count();QString gotoPage1=ui->lineEdit_goto->text();int gotoPage2=gotoPage1.toInt();if(gotoPage2<=TotalPage){ui->stackedWidget->setCurrentIndex(gotoPage2-1);ui->CurrentPage->setText("当前页:"+QString::number(gotoPage2));}}void ClientUI::receiveClientNum(QString IP,QString Port,int ClientNum,QString Message,bool state,QString time)
{Client_Number=ClientNum;//客户端数量int Page_Want=ceil((float)Client_Number/9);//每页九个,需要的页数ui->TotalPage->setText("总页数:"+QString::number(Page_Want));int CurrentPage=ui->stackedWidget->currentIndex();ui->CurrentPage->setText("当前页:"+QString::number(CurrentPage+2));//动态添加页QWidget *Page[Page_Want];for(int i=0;i<Page_Want;i++){Page[i]=new QWidget;ui->stackedWidget->addWidget(Page[i]);}//批量添加客户端界面TcpClient *TcpView[Client_Number];for(int i=0;i<Client_Number;i++){TcpView[i]=new TcpClient;TcpView[i]->connect_to_server(IP,Port.toInt());T.push_back(TcpView[i]->tcpsocket);}//构建布局数组QGridLayout *GridLayout[Page_Want];for(int i=0;i<Page_Want;i++){GridLayout[i]=new QGridLayout;}//动态布局,每页九个控件int countView=0;for(int k=0;k<Page_Want;k++){for(int i=0;i<3;i++){for(int j=0;j<3;j++){if(countView<Client_Number)GridLayout[k]->addWidget(TcpView[countView++],i,j,1,1);elsebreak;}}}for(int i=0;i<Page_Want;i++)//给各页面布局{Page[i]->setLayout(GridLayout[i]);}if(state)//自否自动发送{timer=new QTimer;connect(timer,SIGNAL(timeout()),this,SLOT(timer_doing()));timer->start(time.toInt());}QStringList List;//划分消息List=Message.split(";");QByteArray M[List.length()];for(int i=0;i<List.length();i++){QString t = List[i];M[i]=t.toLatin1();msg.push_back(M[i]);}for(int i=List.length();i<Client_Number;i++){msg.push_back(" ");}for(int i=0;i<Client_Number;i++)TcpView[i]->setText_to_show(msg[i]);}void ClientUI::timer_doing()//定时发送数据
{for(int i=0;i<Client_Number;i++){T[i]->write(msg[i]);}
}void ClientUI::closeEvent(QCloseEvent *event)//关闭界面断开TCPSocket
{for(int i=0;i<Client_Number;i++)T[i]->disconnectFromHost();
}

5、mainwindows.h


#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <clientui.h>
#include <QDebug>namespace Ui {class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();bool state=false;QString IP,Port,Message;QString time;int ClientNumber;signals:void passClientNum(QString IP,QString Port,int ClientNum,QString Message,bool state,QString time);private slots:void on_pushButton_create_clicked();void on_checkBox_stateChanged(int arg1);private:Ui::MainWindow *ui;ClientUI *clientui;
};#endif // MAINWINDOW_H

6、mainwindows.c


#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);clientui=new ClientUI;connect(this,SIGNAL(passClientNum(QString,QString,int,QString,bool,QString)),clientui,SLOT(receiveClientNum(QString,QString,int,QString,bool,QString)));
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_create_clicked()//创建
{time=ui->lineEdit_time->text();if(time.isEmpty())//发送间隔默认1000time=1000;IP=ui->lineEdit_IP->text();Port=ui->lineEdit_Port->text();Message=ui->textEdit_Message->toPlainText();ClientNumber=ui->lineEdit_ClientNum->text().toInt();if(!IP.isEmpty()&&!Port.isEmpty()&&!QString::number(ClientNumber).isEmpty()){emit passClientNum(IP,Port,ClientNumber,Message,state,time);clientui->show();}
}void MainWindow::on_checkBox_stateChanged(int arg1)//是否自动发送
{if(arg1!=0)state=true;elsestate=false;
}

QT--多TCP客户端相关推荐

  1. qt客户端连接服务器不响应,qt判断tcp客户端是否连接服务器

    qt判断tcp客户端是否连接服务器 内容精选 换一换 本章节指导您使用MongoDB客户端,通过弹性云服务器内网方式连接GaussDB(for Mongo)集群实例.操作系统使用场景:弹性云服务器的操 ...

  2. QT学习——Tcp客户端通信(本地回环)

    1.Linux下Tcp通信 2.Qt下Tcp通信 1)Tcp框架--简图 下面的文本框是写入文本,上面的是显示发送后接收到的信息.这里发送的消息并不会立刻显示到界面上,而是要通过 readyRead( ...

  3. QT自制TCP客户端

    一.TCP简介 目前还不是很懂,今后再说TCP,对于这个TCP客户端的编写,用到了两个参数: IP地址 端口号 二.项目规划 编写一个TCP客户端,我们需要先把逻辑功能梳理清除,我也是个初学者,就从最 ...

  4. QT制作TCP客户端

    1,主界面 2,代码 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QTcpSo ...

  5. Qt中的TCP客户端编程

    文章目录 1 Qt中的TCP客户端编程 1.1 TCP客户端编程介绍 1.2 QTcpSocket的同步编程 1.3 QTcpSocket的异步编程 1 Qt中的TCP客户端编程 1.1 TCP客户端 ...

  6. Qt 多线程TCP服务端一键关闭所有客户端

    Qt 多线程TCP服务端一键关闭所有客户端 任务描述: 实现多线程TCP服务端一键关闭所有客户端的连接. 解决过程: 1.Qt的服务端提供了close的功能,但是只用来不响应新接入的客户端. 手册中是 ...

  7. python服务器qt客户端_python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例...

    本文在上文的基础上重新实现支持多线程的服务器. 以下为TCP客户端的程序代码: #!/usr/bin/env python3 import sys from PyQt5.QtCore import ( ...

  8. c++ qt获取电脑的内存_Qt官方示例-TCP客户端/服务器示例

    该示例演示了在本地主机上的TCP客户端和服务器是如何通讯的. 客户端 绑定信号槽. connect(&tcpClient, &QAbstractSocket::connected, t ...

  9. QT编写TCP/UDP调试助手之TCP客户端

    效果图: TCP/UDP调试助手之TCP客户端,支持错误信息显示,断开连接后及时释放资源. 一.关键代码 1.在.pro文件中添加QT += network,包含头文件#include <QTc ...

  10. 使用QT编写TCP服务器与客户端程序

    建立工程 在学习了霍亚飞的<Qt Creator快速入门(第3版)>后,参考"18.4 TCP"中的示例程序,编写了一个在同一个工程中实现服务器与客户端的习作程序,变量 ...

最新文章

  1. ceph中使用ceph-objectstore-tool将pg从incomplete标记为complete
  2. 汉字转16进制java_java实现汉字转unicode与汉字转16进制实例
  3. 用wget做站点镜像
  4. 使用onenote记HTML笔记,如何在Windows 10中使用OneNote做笔记
  5. azure mysql 配置,微软Azure云MySQL in-app 的配置,简化PHP内容管理系统配置
  6. WebService系列之使用Axis获取天气预报数据
  7. python 编辑数学公式_用python编写数学公式
  8. Laravel核心代码学习--用户认证系统的实现细节
  9. centos7.5下yum安装mysql-5.6.43
  10. 类加载的过程(加载、验证、准备、解析、初始化)
  11. 交互设计精髓之理解输出
  12. 射频天线设计-Smith圆图
  13. 安装华为P10plus的手机驱动过程
  14. 根据日期参数查询润乾报表
  15. 在已有win7系统的基础上重装win10系统
  16. Windows10服务优化
  17. 使用postman测试图片上传
  18. SDHC (High Capacity SD Memory Card)
  19. 报错及解决:Kernel does not exist: 96b59d42-d81e-471c-8ef9-63a61a963a16
  20. python 基于PHP在线音乐网站

热门文章

  1. Protractor 怎么编写自动化测试用例
  2. TCP/IP中的TTL
  3. pci 中断冲突_如何解决IRQ冲突
  4. excel切片器_Excel数据透视表,结合切片器制作一个动态的图表!
  5. Linux Kernel PANIC(一)--概述(Hard Panic/Aieee和Soft Panic/Oops)
  6. Linux运维基础进阶——PPT汇总
  7. 学习/思考 - 优秀资源 - 收集
  8. 时间序列分析的基本思路与步骤
  9. mac u盘格式化 linux系统文件,U盘重新安装Mac OS系统教程
  10. “收藏本站” 的代码