First, download source files from ZeroMq Download Page and build the project in builds\msvc for Windows to produce required library and dll files. Then:
1. Open a new project.
2. Add ØMQ Include directory and Library directory from your project configuration.
3. Add libzmq.lib to your Linker additional dependencies.
4. Copy libzmq.dll to your build directory.
5. Build and run your first ØMQ applications.
ØMQ Receiver Code
#include "zmq.h"
int main()
{
void *context = zmq_ctx_new();
void *responder = zmq_socket(context, ZMQ_PAIR);
int rc = zmq_bind(responder, "tcp://*:5555");
printf("Receiver: Started\n");
char buffer[128];
while (true)
{
int num = zmq_recv(responder, buffer, 128, 0);
if (num > 0)
{
buffer[num] = '\0';
printf("Receiver: Received (%s)\n", buffer);
}
}
return 0;
}
ØMQ Sender Code
#include "zmq.h"
#ifndef _WIN32
#include "unistd.h"
#else
#include "windows.h"
#endif
int main()
{
char buffer[32];
void *context = zmq_ctx_new();
void *requester = zmq_socket(context, ZMQ_PAIR);
int rc = zmq_connect(requester, "tcp://localhost:5555");
printf("Sender: Started\n");
for (int i = 0; i < 10; ++i)
{
#ifndef _WIN32
sleep(1000);
#else
Sleep(1000);
#endif
sprintf(buffer, "Message %d\0", i + 1);
printf("Sender: Sending (%s)\n", buffer);
int rc = zmq_send(requester, buffer, strlen(buffer), 0);
}
zmq_close(requester);
zmq_ctx_destroy(context);
return 0;
}
Download ZeroMQ Sender and Receiver and try running the application for windows operating systems.
C/C++ ØMQ Server Client Example for Debian or Ubuntu
1. Install ZeroMQ
On Ubuntu/Debian:
sudo apt-get install libzmq3-dev
2. Server (Reply / REP)
// server.cpp
#include <zmq.hpp>
#include <iostream>
#include <string>
int main() {
zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_REP);
socket.bind("tcp://*:5555");
std::cout << "Server listening on port 5555..." << std::endl;
while (true) {
zmq::message_t request;
// Wait for next request from client
socket.recv(request, zmq::recv_flags::none);
std::string received(static_cast<char*>(request.data()), request.size());
std::cout << "Received: " << received << std::endl;
// Send reply back to client
std::string reply = "Hello from server";
zmq::message_t response(reply.begin(), reply.end());
socket.send(response, zmq::send_flags::none);
}
return 0;
}
3. Client (Request / REQ)
// client.cpp
#include <zmq.hpp>
#include <iostream>
#include <string>
int main() {
zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_REQ);
socket.connect("tcp://localhost:5555");
std::cout << "Connecting to server..." << std::endl;
// Send request
std::string msg = "Hello from client";
zmq::message_t request(msg.begin(), msg.end());
socket.send(request, zmq::send_flags::none);
// Get reply
zmq::message_t reply;
socket.recv(reply, zmq::recv_flags::none);
std::string received(static_cast<char*>(reply.data()), reply.size());
std::cout << "Received reply: " << received << std::endl;
return 0;
}
4. Compile
g++ server.cpp -o server -lzmq
g++ client.cpp -o client -lzmq
5. Run
Open two terminals:
• Terminal 1:
./server
• Terminal 2:
./client
How it works
• Server uses ZMQ_REP (reply socket)
• Client uses ZMQ_REQ (request socket)
• Communication is strictly alternating:
• Client sends → Server receives
• Server replies → Client receives
This is the simplest pattern in ZeroMQ, often called REQ/REP.