ubuntu上安装C++/C网络通信zeromq库,并使用zeromq开发服务端和多个客服端程序,实现跨服务器通讯,服务端服务器ip是172.16.48.59
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库并使用它开发服务端和多个客户端程序以实现跨服务器通信,您需要遵循以下步骤:
- 安装ZeroMQ
首先,您需要安装ZeroMQ库。在Ubuntu上,您可以使用apt包管理器来安装。
sudo apt update
sudo apt install libzmq3-dev
- 编写服务端程序
接下来,您需要编写一个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;
}
- 编译服务端程序
使用g++编译上述C代码:
g++ -c ./server.cpp -o ./server.o -I ./
g++ ./server.o -L ./ -lzmq -o ./server
- 编写客户端程序
然后,您需要编写一个或多个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;
}
- 编译客户端程序
同样,使用g++编译客户端代码:
g++ -c ./client.cpp -o ./client.o -I ./
g++ ./client.o -L ./ -lzmq -o ./client
- 运行程序
在服务器端,运行:
./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!
客户端与服务端启动时间可以不分先后。
您可以在多个服务器上运行客户端程序,以实现跨服务器通信。
更多推荐
所有评论(0)