首页 > 其他 > 详细

QT QLocalServer服务端与node IPC通信

时间:2020-07-08 12:47:05      阅读:63      评论:0      收藏:0      [点我收藏+]

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) {
    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);
})

 

QT QLocalServer服务端与node IPC通信

原文:https://www.cnblogs.com/caiyingyong/p/13266100.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!