C/C++ ØMQ Server Client Example, ZeroMQ Sender Receiver Pair

C/C++ ØMQ Server Client Example, ZeroMQ Sender Receiver Pair

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.

Contents related to 'C/C++ ØMQ Server Client Example, ZeroMQ Sender Receiver Pair'

C# ØMQ Server Client Example, C# ZeroMQ Sender Receiver Pair
C# ØMQ Server Client Example, C# ZeroMQ Sender Receiver Pair
Coordinating C/C++ ØMQ and .NET ØMQ
Coordinating C/C++ ØMQ and .NET ØMQ