Zmq源码地址:https://zeromq.org/languages/c/
发布代码:
#include <zmq.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main(void) {
void *context = zmq_ctx_new();
void *publisher = zmq_socket(context, ZMQ_PUB);
zmq_bind(publisher, "tcp://*:5556");
while (1) {
// 发送GPS数据
char *gps_data = "GPS: Latitude: 40.7128, Longitude: -74.0060";
zmq_send(publisher, gps_data, strlen(gps_data), 0);
// 发送车辆状态报文
char *vehicle_status = "Status: Battery: 80%, Speed: 60km/h";
zmq_send(publisher, vehicle_status, strlen(vehicle_status), 0);
sleep(1); // 模拟数据发送间隔
}
zmq_close(publisher);
zmq_ctx_destroy(context);
return 0;
}
订阅代码:
#include <iostream>
#include <zmq.h>
#include <stdio.h>
#include <string.h>
using namespace std;
int main() {
void *context = zmq_ctx_new();
void *subscriber = zmq_socket(context, ZMQ_SUB);
zmq_connect(subscriber, "tcp://localhost:5556");
// 订阅GPS数据
zmq_setsockopt(subscriber, ZMQ_SUBSCRIBE, "GPS", strlen("GPS"));
// 订阅Status数据
zmq_setsockopt(subscriber, ZMQ_SUBSCRIBE, "Status", strlen("Status"));
while (1) {
char buffer[256];
zmq_recv(subscriber, buffer, 255, 0);
buffer[255] = '\0';
printf("Received: %s\n", buffer);
}
zmq_close(subscriber);
zmq_ctx_destroy(context);
return 0;
}
效果: