zoukankan      html  css  js  c++  java
  • QT QLocalServer服务端与node IPC通信

    QT 服务端代码:

    .h

    #ifndef LOCALSERVER_H
    #define LOCALSERVER_H
    
    #include <QObject>
    #include <QtNetwork>
    
    class LocalServer : public QObject
    {
        Q_OBJECT
    public:
        explicit LocalServer(QObject *parent = nullptr);
        ~LocalServer();
    
        bool RunServer(QString name);
    
    signals:
    
    public slots:
        void serverNewConnectionHandler();
        void socketReadyReadHandler();
    
    private:
        QLocalServer *m_localServer;
        QLocalSocket *m_socket;
    };
    
    #endif // LOCALSERVER_H

    .cpp

    #include "localserver.h"
    
    #include <QDebug>
    
    LocalServer::LocalServer(QObject *parent) :
        QObject(parent), m_localServer(nullptr), m_socket(nullptr)
    {
        m_localServer = new QLocalServer();
        connect(m_localServer, &QLocalServer::newConnection, this, &LocalServer::serverNewConnectionHandler);
    }
    
    LocalServer::~LocalServer() {
        m_localServer->close();
        delete m_localServer;
    }
    
    bool LocalServer::RunServer(QString name) {
       // "/tmp/echo.sock" QLocalServer::removeServer(name);
    return m_localServer->listen(name); } void LocalServer::serverNewConnectionHandler() { qDebug() << "new connction"; m_socket = m_localServer->nextPendingConnection(); connect(m_socket, &QLocalSocket::readyRead, this, &LocalServer::socketReadyReadHandler); connect(m_socket, &QLocalSocket::disconnected, m_socket, &QLocalSocket::deleteLater); connect(m_socket, &QLocalSocket::disconnected, [=]() { qDebug() << "disconnected"; }); } void LocalServer::socketReadyReadHandler() { QTextStream stream(m_socket); qDebug() << "DATA:" << stream.readAll(); }

    nodejs 服务端代码:

    let net = require('net');
    let path = require('path');
    
    let server = net.createServer(function (connect) {
        connect.on('error',function(err){
            console.log('socket error:' + err);
            connect.end();
        });
        connect.on('close',function(data){
            console.log('client closed:', data);
        });
        connect.on("data",function (data) {
            console.log('data:', data);
        })
    }).listen(path.join('\\?\pipe','\tmp\echo.sock'));
    
    server.on("error",function(err){
        console.log("error:" + err);
    });

    nodejs 客户端代码:

    let net = require('net');
    let path = require('path');
    
    let client = new net.Socket();
    
    let strPath = path.join('\\?\pipe', '/tmp/echo.sock');
    console.log(strPath);
    client.connect(strPath, () => {
      console.log("已连接到服务器"); 
    })
    
    client.on('data', (data) => {
        console.log('data:', data.toString());
    })
    
    client.on('close', () => {
        console.log('Connection closed');
    })
    
    client.on('end', () => {
        console.log('已从服务器断开');
    })
    
    client.on('error', (err) => {
        console.log("err:", err);
    })
  • 相关阅读:
    Electron中git, npm,webpack使用
    Luogu_2061_[USACO07OPEN]城市的地平线City Horizon
    Luogu_1080_国王游戏
    Luogu_2878_[USACO07JAN]保护花朵Protecting the Flowers
    GYOJ_1812_股票(stock)
    JXJJOI2018_三题
    JXJJOI2018_T3_catch
    JXJJOI2018_T1_market
    JXJJOI2018_T2_tank
    Luogu_2876_[USACO07JAN]解决问题Problem Solving
  • 原文地址:https://www.cnblogs.com/caiyingyong/p/13266100.html
Copyright © 2011-2022 走看看