大佬教程收集整理的这篇文章主要介绍了Qt桌面使用Node.js和Socket.io监听端口,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我宁愿实现一个“推送”环境,而不是拉动数据,其中Qt应用程序与远程Web服务器上的端口建立持久连接,并从node.js侦听更新或“广播”.
我已经使用Node.js和socket.io构建了类似于基于Web的应用程序的东西,所以我不是新手,但我似乎无法弄清楚如何在Qt中实现这一点.我可以使用QTcpSocket建立到端口4000的连接,我可以使用Node.js启动http服务器,但我似乎无法接收任何广播的消息.
这里缺少的一件是socket.io,但我不知道如何使用它或在Qt内建立所需的连接 – 所以我不知所措.
在Qt应用程序内连接并侦听端口4000
void MainWindow::connectTcp() { client = new QTcpSocket(this); QHostAddress hostadd("myIpaddress"); connect(client,SIGNAL(connected()),this,SLOT(isConnected())); connect(client,SIGNAL(error(QAbstractSocket::SocketError)),SLOT(connectionError(QAbstractSocket::SocketError))); connect(client,SIGNAL(readyRead()),SLOT(readTcPDAta())); client->connectToHost(hostadd,3000); }
在Node.js中创建服务器并发送更新
var http = require('http'); var url = require('url'); var msg = ''; var port = 4000; /* path to socket.io */ var path = '/path/to/node_modules/socket.io'; var server = http.createServer(function (req,res) { req.on('data',function (d) { data += d; }); req.on('end',function(){ msg = data; res.writeHead(200,{'Content-Type':'text/plain'}); res.write(msg); res.end(); console.log('SEND DATA: ',msg); }); }).listen(port);
非常感谢任何建议 – 即使我可以尝试做什么?
编辑 – 更新
在未能使用C合并Socket.io和WebSocket之后,我尝试使用QWebView来实现它并且它有效.我正在分享我在下面做的事情的细节,以防其他人需要帮助.
@H_367_5@mainwindow.cpp这只是一个通用的Qt Gui应用程序,其唯一目的是创建一个加载HTML文件的QWebView实例.正在加载的HTML文件(在后台)包含建立套接字连接的javascript代码.
我创建了一个单独的Qt类来与index.html中的javascript进行交互,以对来自服务器的响应进行操作. More Info
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),ui(new Ui::MainWindow) { ui->setupUi(this); // Set default proxy (this may not always be necessary) QNetworkProxyFactory::setUseSystemConfiguration(true); h = new Hello(this); view = new QWebView(this); view->load(QUrl("http://www.mydomain.com/startconnection.html")); // I don't want the webview to show,it should run in the BACkground view->hide(); frame = view->page()->mainFrame(); connect(view,SIGNAL(loadFinished(bool)),SLOT(loadFinished(bool))); } void MainWindow::loadFinished(bool loaded) { qDebug() << "Webpage Loaded? " << loaded; } MainWindow::~MainWindow() { delete ui; }
http://www.mydomain.com/startconnection.html
这是加载到Qt的页面.它只是建立与mydomain.com的Socket.io连接,该连接正在侦听端口4000上的连接
<html> <head> <script type="text/javascript" src="http://www.mydomain.com:4000/socket.io/socket.io.js"></script> <script type="text/javascript"> var socket; window.onload = onLoad; function onLoad() { socket = io.connect('http://www.mydomain.com:4000'); socket.on('connect',function(){ alert("Connected To Socket"); }); socket.on('message',function(data) { alert("Here Comes A message From The Server"); }); } </script> </head> <body> </body> </html>
/var/www/vhosts/mydomain.com/socket/server.js
这是启动http服务侦听端口4000上的连接的节点脚本.我使用“forever”启动服务并将所有console.info消息输出到这样的日志文件:forever -al / var / www / vhosts / mydomain .com / connection.log start /var/www/vhosts/mydomain.dom/socket/server.js.
var http = require('http'); var url = require('url'); var qs = require('queryString'); var child_process = require('child_process'); var theSockets = {}; /* listening port */ var port = 4000; /* path to socket.io on server */ var path = '/var/www/vhosts/mydomain.com/httpdocs/server/node_modules/socket.io'; var server = http.createServer(function (req,res) { var data = ''; var msg = ''; req.on('data',function (d) { data += d; }); req.on('end',function(){ msg = data; io.sockets.emit('message',msg); res.end(); }); } res.end(); }).listen(port); var io = require(path).listen(server); io.sockets.on('connection',function(socket) { var d = new Date(); console.log('JOINED SOCKET '+d.toLocaleString()+' SOCKET ID '+socket.id); socket.on('disconnect',function() { var d = new Date(); console.log('EXITED SOCKET '+d.toLocaleString()+' SOCKET ID '+socket.id); }); });
希望这有助于某人!
以上是大佬教程为你收集整理的Qt桌面使用Node.js和Socket.io监听端口全部内容,希望文章能够帮你解决Qt桌面使用Node.js和Socket.io监听端口所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。