IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> QT QTcpServer -> 正文阅读

[网络协议]QT QTcpServer

#ifndef TCP4WEB_H
#define TCP4WEB_H
 
#include <QObject>
#include <QTcpServer>
#include <QTcpSocket>
#include <QDebug>
 
class Tcp4Web : public QObject
{
 
    Q_OBJECT
public:
    explicit Tcp4Web(QObject *parent = 0);
    ~Tcp4Web();
signals:
 
    void dataArrive(QByteArray ba); //send data to deal
 
public slots:
 
    void onNewConnection(); //new connection come
    void socketReaddata();    //read socket data
    void socketDisconnect();
 
 
private:
    QTcpServer *m_tcpserver;
 
    QByteArray tmpdata;
    int tcpPort = 6000;
    QByteArray m_buffer;
 
 
    QHash<QString, QTcpSocket*>m_validClientList;// 有效列表<用户:密码,QTcpSocket* >
 
    QList<QTcpSocket*>m_allClinet;
 
};
 
#endif // TCP4WEB_H
 
#include "tcp4web.h"
 
Tcp4Web::Tcp4Web(QObject *parent) : QObject(parent)
{
    //m_thread = new QThread();
    m_tcpserver = new QTcpServer();
    connect(m_tcpserver, &QTcpServer::newConnection, this, &Tcp4Web::onNewConnection, Qt::DirectConnection);
    if (!m_tcpserver->listen(QHostAddress::AnyIPv4, 6000))
    {
            m_tcpserver->close();
            qDebug()<< "tcplistenerror:" << m_tcpserver->errorString();
    }
 
}
 
Tcp4Web::~Tcp4Web()
{
 
    m_tcpserver->close();
    delete m_tcpserver;
}
 
void Tcp4Web::onNewConnection()
{
    QTcpSocket *socket_Client= m_tcpserver->nextPendingConnection();
 
    m_allClinet.append(socket_Client);
 
    qDebug() << "new TCPconnection come.";
    connect(socket_Client, SIGNAL(readyRead()), this, SLOT(socketReaddata()));
    connect(socket_Client, SIGNAL(disconnected()), this, SLOT(socketDisconnect()));
 
    QByteArray data("connect ... need uersname and pwd to login");
 
    socket_Client->write(data, data.length());
}
 
void Tcp4Web::socketReaddata()
{
    QTcpSocket *socket_Client  = (QTcpSocket*)sender();
    if(m_allClinet.contains(socket_Client))
    {
        qDebug() << "m_allClinet.contains TCPconnection."<< m_allClinet.indexOf(socket_Client);
    }
    QByteArray data = socket_Client->readAll();
    QString str = data.data();
 
    qDebug()<< " 11111111    "<<str;
    emit dataArrive(tmpdata);
}
 
void Tcp4Web::socketDisconnect()
{
 
    QTcpSocket *socket_Client  = (QTcpSocket*)sender();
    m_allClinet.removeOne(socket_Client);
    socket_Client->deleteLater();
    qDebug()<< " deleteLater    "<<m_allClinet.size();
 
}
客户端
#ifndef WIDGET_H
#define WIDGET_H
 
#include <QWidget>
#include <QTcpSocket>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
 
class Widget : public QWidget
{
    Q_OBJECT
 
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
 
private slots:
    void on_pushButton_clicked();
 
    void on_pushButton_2_clicked();
    void on_processPendingData();
 
private:
    Ui::Widget *ui;
    QList<QTcpSocket*> m_socketList;
};
#endif // WIDGET_H
 

#include "widget.h"
#include "ui_widget.h"
 
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}
 
Widget::~Widget()
{
    delete ui;
}
 
 
void Widget::on_pushButton_clicked()
{
    QTcpSocket *newSocket = new QTcpSocket(this);
    connect(newSocket, SIGNAL(readyRead()), this, SLOT(on_processPendingData()));
 
    newSocket->connectToHost("192.168.61.213", 6000);
    if (newSocket->waitForConnected() && newSocket->error() != QAbstractSocket::SocketTimeoutError)
    {
        m_socketList.append(newSocket);
         qDebug() << "waitForConnected OK!";
 
        ui->comboBox->clear();
        for(int i = 0; i < m_socketList.size(); i++)
        {
            QString str = QString("%1 Client").arg(i);
            ui->comboBox->addItem(str);
 
        }
        ui->comboBox->setCurrentIndex(0);
 
    }
    else
    {
        qDebug() << "waitForConnected failed!";
    }
 
 
}
void Widget::on_processPendingData()
{
    QTcpSocket *socket_Client  = (QTcpSocket*)sender();
 
 
    QByteArray datagram = socket_Client->readAll();
    if (datagram.size() > 0)
    {
        qDebug()<<"111111111"<<QString(datagram.data());
 
    }
 
 
}
void Widget::on_pushButton_2_clicked()
{
    QString str = ui->lineEdit->text();
    QByteArray ba; ba.append(str);
 
    m_socketList.at(ui->comboBox->currentIndex())->write(ba, ba.length());
 
 
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

                
        
    
 

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 10:11:58  更:2021-08-06 10:13:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 14:20:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码