Cada módulo de rede de comunicação cliente QLocalServer QLocalSocket (h) entre os componentes

Uma breve
1. Internet do cliente muitas vezes são compostos por uma pluralidade de componentes n, compartilhamento de dados e comunicação entre os componentes são concluídas usando o socket local
pacote 2. O acordo entre os componentes, e definir um campo de serviço comum campo, cada componente analisa o pacote é completado comunicação
renderizações II
Aqui Insert Picture Descrição
três locais amostra comunicação soquete Código

#ifndef LOCALCHARTROOM_H
#define LOCALCHARTROOM_H

#include <QWidget>
#include <QLocalServer>
#include <QLocalSocket>
#include <QDateTime>
#include <QEventLoop>
#include <QTimer>
namespace Ui {
class LocalChartRoom;
}
class LocalChartRoom : public QWidget
{
   Q_OBJECT

public:
   explicit LocalChartRoom(QWidget *parent = nullptr);
   ~LocalChartRoom();
   void initClient();
   void initServer();

private slots:
   void on_pushButton_clicked();
   void on_pushButton_4_clicked();

   void on_ServerConnected();
   void on_ServerReadyRead();

   void on_pushButton_2_clicked();
   void on_pushButton_3_clicked();

   void on_ClientReadyRead();
   void on_Clientdisconnected();
   void on_ClientConnected();

   void on_pushButton_6_clicked();
   void on_pushButton_5_clicked();

private:
   Ui::LocalChartRoom *ui;
   QLocalServer mServer;
   QLocalSocket mClientsocket;
   QEventLoop mLoop;
   QLocalSocket *m_pServerSocket;
};

#endif // LOCALCHARTROOM_H

#include "localchartroom.h"
#include "ui_localchartroom.h"

LocalChartRoom::LocalChartRoom(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::LocalChartRoom)
{
    ui->setupUi(this);
}

LocalChartRoom::~LocalChartRoom()
{
    delete ui;
}
//************************************************client
void LocalChartRoom::initClient()
{
    disconnect(&mClientsocket,SIGNAL(connected()),this,SLOT(on_ClientConnected()));
    disconnect(&mClientsocket,SIGNAL(disconnected()),this,SLOT(on_Clientdisconnected()));
    disconnect(&mClientsocket,SIGNAL(readyRead()),this,SLOT(on_ClientReadyRead()));
    connect(&mClientsocket,SIGNAL(connected()),this,SLOT(on_ClientConnected()));
    connect(&mClientsocket,SIGNAL(disconnected()),this,SLOT(on_Clientdisconnected()));
    connect(&mClientsocket,SIGNAL(readyRead()),this,SLOT(on_ClientReadyRead()));
    mClientsocket.connectToServer("ChartRoom");
}
void LocalChartRoom::on_ClientConnected()
{
    qDebug()<<"on_ClientConnected";
}
void LocalChartRoom::on_Clientdisconnected()
{
    qDebug()<<"on_Clientdisconnected";

}
void LocalChartRoom::on_ClientReadyRead()
{
    ui->textBrowser->append(QDateTime::currentDateTime().toString("yyyy-mm-dd hh:mm:ss.ms") + "\n" + "server:" + mClientsocket.readAll());
}
//************************************************client

//************************************************server
void LocalChartRoom::initServer()
{
    disconnect(&mServer,SIGNAL(newConnection()),this,SLOT(on_ServerConnected()));
    mServer.removeServer("ChartRoom");
    connect(&mServer,SIGNAL(newConnection()),this,SLOT(on_ServerConnected()));
    mServer.listen("ChartRoom");
}
void LocalChartRoom::on_ServerConnected()
{
    m_pServerSocket = mServer.nextPendingConnection();
    connect(m_pServerSocket,SIGNAL(readyRead()),this,SLOT(on_ServerReadyRead()));
}
void LocalChartRoom::on_ServerReadyRead()
{
    ui->textBrowser_2->append(QDateTime::currentDateTime().toString("yyyy-mm-dd hh:mm:ss.ms") + "\n" + "client:" + m_pServerSocket->readAll());
}
//************************************************server


void LocalChartRoom::on_pushButton_clicked()
{
    ui->textBrowser->append(QString::fromLocal8Bit("正在连接服务端..."));
    QTimer::singleShot(1000,this,[=](){
        mLoop.quit();
    });
    mLoop.exec();
    initClient();
    ui->textBrowser->append(QString::fromLocal8Bit("服务端连接成功"));
}

void LocalChartRoom::on_pushButton_4_clicked()
{
    ui->textBrowser_2->append(QString::fromLocal8Bit("正在启动服务端..."));
    QTimer::singleShot(1000,this,[=](){
        mLoop.quit();
    });
    mLoop.exec();
    initServer();
    ui->textBrowser_2->append(QString::fromLocal8Bit("服务端启动成功"));
}

void LocalChartRoom::on_pushButton_2_clicked()
{
    //client send msg
    mClientsocket.write(ui->lineEdit->text().toLatin1());
    mClientsocket.flush();
    ui->lineEdit->clear();
}

void LocalChartRoom::on_pushButton_3_clicked()
{
    //server send msg
    if(!mServer.isListening())
        return;
    m_pServerSocket->write(ui->lineEdit_2->text().toLatin1());
    m_pServerSocket->flush();
    ui->lineEdit_2->clear();
}

void LocalChartRoom::on_pushButton_6_clicked()
{
    //client close
    mClientsocket.disconnectFromServer();
    ui->textBrowser->append(QString::fromLocal8Bit("已经断开服务器连接..."));
}

void LocalChartRoom::on_pushButton_5_clicked()
{
    //server close
    mServer.close();
    mServer.removeServer("ChartRoom");
    ui->textBrowser_2->append(QString::fromLocal8Bit("服务器停止提供服务..."));

}

IV Resumo
1. A tomada é, essencialmente, os dispositivos de entrada e saída, ler e operações de gravação suportado NATURAL
Aqui Insert Picture Descrição
2. Note que ler, escrever, chamada desconexão bloqueio métodos de classe de conexão
Aqui Insert Picture Descrição

Publicado 30 artigos originais · ganhou elogios 1 · vista 1138

Acho que você gosta

Origin blog.csdn.net/u010906468/article/details/104931381
Recomendado
Clasificación