C++版Zeromq
要在Ubuntu上安装C++网络通信库ZeroMQ,并使用它开发服务端和客户端程序,你需要按照以下步骤进行操作:

步骤1:安装ZeroMQ

在服务端服务器和各个客户端服务器上,你可以通过Ubuntu的包管理器安装ZeroMQ。打开终端,运行以下命令:

sudo apt update
sudo apt install libzmq5

步骤2:创建ZeroMQ服务端项目

创建一个新的C++项目,并编写一个ZeroMQ服务端程序。你可以使用以下代码作为示例:

#include <zmq.hpp>
#include <iostream>

int main() {
    // 创建上下文和套接字
    zmq::context_t context(1);
    zmq::socket_t socket(context, ZMQ_PUB);
    socket.bind("tcp://*:5555"); // 绑定到端口5555

    while (true) {
        zmq::message_t message(6); // 创建一个长度为6的消息
        memcpy(message.data(), "Hello", 5); // 填充消息内容
        socket.send(message); // 发送消息到所有连接的客户端
        std::cout << "Sent message: " << message.data() << std::endl;
        sleep(1); // 等待1秒再发送下一个消息
    }
    return 0;
}

步骤3:创建ZeroMQ客户端项目

创建另一个C++项目,并编写一个ZeroMQ客户端程序。你可以使用以下代码作为示例:

#include <zmq.hpp>
#include <iostream>
#include <string>

int main() {
    // 创建上下文和套接字
    zmq::context_t context(1);
    zmq::socket_t socket(context, ZMQ_SUB);
    socket.connect("tcp://172.16.48.59:5555"); // 连接到服务端IP地址和端口号
    socket.setsockopt(ZMQ_SUBSCRIBE, "", 0); // 订阅所有消息

    while (true) {
        zmq::message_t message; // 接收消息的缓冲区
        socket.recv(message); // 接收消息
        std::cout << "Received message: " << std::string(static_cast<char*>(message.data()), message.size()) << std::endl;
    }
    return 0;
}

步骤4:编译和运行程序

使用你喜欢的C++编译器(如g++)编译服务端和客户端程序。例如,使用g++编译服务端程序:

g++ -c ./server.cpp -o ./server.o -I ./
g++ ./server.o -L ./ -lzmq -o ./server

编译客户端程序:

g++ -c ./client.cpp -o ./client.o -I ./
g++ ./client.o -L ./ -lzmq -o ./client

运行服务端程序:

./server & # 在后台运行服务端程序,以便你可以同时运行客户端程序进行测试。你可以使用Ctrl+C停止服务端程序。

运行客户端程序:

./client # 运行客户端程序并等待接收服务端的消息。你应该能够在终端中看到接收到的消息。如果你需要连接多个客户端,可以复制客户端程序的代码并分别编译和运行它们。确保每个客户端连接到不同的端口号或使用不同的连接类型(如PUB/SUB、REQ/REP等)。" &"在后台运行服务端程序,以便你可以同时运行客户端程序进行测试。你可以使用Ctrl+C停止服务端程序。

C版Zeromq
要在Ubuntu上安装C的ZeroMQ库并使用它开发服务端和多个客户端程序以实现跨服务器通信,您需要遵循以下步骤:

  1. 安装ZeroMQ

首先,您需要安装ZeroMQ库。在Ubuntu上,您可以使用apt包管理器来安装。

sudo apt update
sudo apt install libzmq3-dev
  1. 编写服务端程序

接下来,您需要编写一个ZeroMQ服务端程序。以下是一个简单的服务端示例,使用ZMQ的PUB-SUB模式:

// server.c
#include <zmq.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(void) {
    void *context = zmq_ctx_new();
    void *publisher = zmq_socket(context, ZMQ_PUB);
    int rc = zmq_bind(publisher, "tcp://172.16.48.59:5555");
    if (rc != 0) {
        printf("Error: %s\n", zmq_strerror(errno));
        exit(EXIT_FAILURE);
    }
    
    while (1) {
        char buffer[255];
        rc = zmq_send(publisher, "Hello, World!", 13, 0);
        if (rc == -1) {
            printf("Error: %s\n", zmq_strerror(errno));
            break;
        }
        sleep(1);
    }
    
    zmq_close(publisher);
    zmq_ctx_destroy(context);
    return 0;
}
  1. 编译服务端程序

使用g++编译上述C代码:

g++ -c ./server.cpp -o ./server.o -I ./
g++ ./server.o -L ./ -lzmq -o ./server
  1. 编写客户端程序

然后,您需要编写一个或多个ZeroMQ客户端程序。以下是一个简单的订阅者客户端示例:

// client.cpp
#include <zmq.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
    void *context = zmq_ctx_new();
    void *subscriber = zmq_socket(context, ZMQ_SUB);
    int rc = zmq_connect(subscriber, "tcp://172.16.48.59:5555");
    if (rc != 0) {
        printf("Error: %s\n", zmq_strerror(errno));
        exit(EXIT_FAILURE);
    }
    
    //“”表示订阅所有主题
    rc = zmq_setsockopt(subscriber, ZMQ_SUBSCRIBE, "", 0);
    if (rc != 0) {
        printf("Error: %s\n", zmq_strerror(errno));
        exit(EXIT_FAILURE);
    }
    
    while (1) {
        char buffer[255];
        rc = zmq_recv(subscriber, buffer, 254, 0);
        if (rc == -1) {
            printf("Error: %s\n", zmq_strerror(errno));
            break;
        }
        buffer[rc] = 0;
        printf("Received message: %s\n", buffer);
    }
    
    zmq_close(subscriber);
    zmq_ctx_destroy(context);
    return 0;
}
  1. 编译客户端程序

同样,使用g++编译客户端代码:

g++ -c ./client.cpp -o ./client.o -I ./
g++ ./client.o -L ./ -lzmq -o ./client
  1. 运行程序

在服务器端,运行:
./server

在客户端,运行:
./client
显示:
Reveive Message: Hello World!
Reveive Message: Hello World!
Reveive Message: Hello World!
Reveive Message: Hello World!
Reveive Message: Hello World!
Reveive Message: Hello World!
Reveive Message: Hello World!

客户端与服务端启动时间可以不分先后。
您可以在多个服务器上运行客户端程序,以实现跨服务器通信。

更多推荐