1、zmq相關庫編譯:https://www.cnblogs.com/tyche116/p/12102761.html
cmake后打開ZeroMQ.sln解決方案,在解決方案配置以及解決方案平台選擇需要編譯的版本后,右鍵僅生成libzmq項目,即可在bin及lib中生成生成對應的dll,lib.
2、Qt中測試所編譯zmq是否正確可用
1)新建qt項目;
2)pro項目文件中添加依賴路徑及依賴文件:
LIBS += -L$$PWD/../ZMQ/lib/Release -llibzmq-v140-mt-4_3_2 INCLUDEPATH += $$PWD/../ZMQ/include DEPENDPATH += $$PWD/../ZMQ/include
3)pro項目文件添加 CONFIG += console 打開調試信息輸出(命令行)窗口;
4)將編譯生成的zmq dll復制到可執行文件exe目錄下;
5)測試代碼及測試結果:
#include "mainwindow.h" #include "ui_mainwindow.h" #include "zmq.h" #include <iostream> #include <QMessageBox> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); int a,b,c; zmq_version(&a,&b,&c); std::cout << "zmq-version:" << a << "-" << b << "-" << c; } MainWindow::~MainWindow() { delete ui; }
6)編譯正確且可以正常使用.
3、進程間通信測試
1)新建兩個工程 server跟client
2)測試代碼編寫
server端代碼
#include "mainwindow.h" #include "ui_mainwindow.h" #include "zmq.h" #include <QThread> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); server(); } MainWindow::~MainWindow() { delete ui; }
void MainWindow::server(void) { //Socket to talk to clients void *context = zmq_ctx_new (); void *responder = zmq_socket (context, ZMQ_REP); int rc = zmq_bind (responder, "tcp://*:5555"); assert (rc == 0); while (1) { char buffer [20]; const char * sendMsg = "[server]"; int bytes = zmq_recv (responder, buffer, 20, 0); buffer[bytes] = '\0'; printf ("Server have received %d bytes == \"%s\"\n",bytes,buffer); QThread::msleep (1); // Do some 'work' zmq_send (responder, sendMsg, strlen(sendMsg), 0); } }
client端代碼
#include "mainwindow.h" #include "ui_mainwindow.h" #include "zmq.h" #include <QThread> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); client(); } MainWindow::~MainWindow() { delete ui; } bool MainWindow::client() { printf("Connecting to server...\n"); void * context = zmq_ctx_new(); void * socket = zmq_socket(context, ZMQ_REQ); zmq_connect(socket, "tcp://localhost:5555"); for(int i = 0; i < 10; ++i) { char buffer[20]; const char * snedMsg = "[client]"; int bytes = zmq_send(socket, snedMsg, strlen(snedMsg), 0); bytes = zmq_recv(socket, buffer, 20, 0); buffer[bytes] = '\0'; printf ("Client have received %d bytes == \"%s\"\n",bytes,buffer); } zmq_close(socket); zmq_ctx_destroy(context); return true; }
3)分別編譯並在同一台電腦上打開