栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

zeromq 发布-订阅 c++与python互传

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zeromq 发布-订阅 c++与python互传

python 发布

import zmq
from random import randrange


context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://*:5556")#这里一般不改

while True:
    zipcode =1
    temperature = 2
    relhumidity =2

    socket.send_string(f"{zipcode} {temperature} {relhumidity}")#传输三个信息

c++接收

#include 
#include 
#include 

int main (int argc, char *argv[])
{
    zmq::context_t context ;

    //  Socket to talk to server
    std::cout << "Collecting updates from weather server...n" << std::endl;
    zmq::socket_t subscriber (context, zmq::socket_type::sub);
    subscriber.connect("tcp://localhost:5556");//改成你要订阅的ip地址,将localhost换成ip地址,后面的:5556是端口号,得和前面的程序对接上.即不用改.

    //  Subscribe to zipcode, default is NYC, 10001
	const char *filter = (argc > 1)? argv [1]: "10001 ";
    subscriber.setsockopt(ZMQ_SUBSCRIBE, "", 0);//把后面两个参数改成这样,什么都能接收到,

    for(int i =0;i<2;i++) {

        zmq::message_t update;
        int one_x, one_y, two_x,two_y,three_x,three_y,four_x,four_y;

        subscriber.recv(&update);

        std::istringstream iss(static_cast(update.data()));
		iss >> one_x >> one_y >> two_x>>two_y >>three_x>>three_y >>four_x >>four_y ;
        printf("%d 和%d 和 %d和 %d 和%d 和%d和 %d 和%d",one_x,one_y,two_x,two_y,three_x,three_y,four_x,four_y);
    }//这里由于python只传输三个数据,所以只有前三个有数据.
    return 0;
}

效果如图:

循环两次打印的哈哈.

下面是自己的笔记,读者可以忽略不看

#include 
#include 
#include 
#include 

struct ConmInfo
{
            int car_one_x;
            int car_one_y;
            int car_two_x;
            int car_two_y;
            int car_three_x;
            int car_three_y;
            int car_four_x;
            int car_four_y;

};

#define within(num) (int) ((float) num * random () / (RAND_MAX + 1.0))

int main () {

    //  Prepare our context and publisher
    zmq::context_t context ;
    zmq::socket_t publisher (context, ZMQ_PUB);//zmq::socket_type::pub
    ConmInfo chong ;
    publisher.bind("tcp://*:5556");

        
    //  Initialize random number generator
    // srandom ((unsigned) time (NULL));
    while (1) {

        //  Get values that will fool the boss
        chong=ConmInfo{1,2,3,4,5,6,7,8};
        //  Send message to all subscribers
        zmq::message_t send_message(sizeof(ConmInfo));//sizeof要的
        memcpy(send_message.data(),&chong,sizeof(chong));
        // zmq::message_t message(20);
        // snprintf ((char *) message.data(), 20 ,
        // 	"%d %d %d %d %d %d %d %d", car_one_x,  car_two_x=3, car_three_x=5);
        // printf("%d",chong.car_one_x);
        publisher.send(send_message);

    }
    return 0;
}
#include 
#include 
#include 
struct ConmInfo
{
            int car_one_x;
            int car_one_y;
            int car_two_x;
            int car_two_y;
            int car_three_x;
            int car_three_y;
            int car_four_x;
            int car_four_y;

};
int main (int argc, char *argv[])
{
    zmq::context_t context ;
    ConmInfo chong=ConmInfo{};
    //  Socket to talk to server
    std::cout << "Collecting updates from weather server...n" << std::endl;
    zmq::socket_t subscriber (context, zmq::socket_type::sub);
    subscriber.connect("tcp://10.11.31.56:5556");

    //  Subscribe to zipcode, default is NYC, 10001
	const char *filter = (argc > 1)? argv [1]: "10001 ";
    subscriber.setsockopt(ZMQ_SUBSCRIBE, "", 0);//玄机在这里,这里是什么都接,具体用法还得看看后面怎么用


    //  Process 100 updates
    int update_nbr;
    long total_temp = 0;
    while(true) {

        zmq::message_t recv_message(sizeof(ConmInfo));
        subscriber.recv(&recv_message);
        memcpy(&chong,recv_message.data(),sizeof(chong));
        // std::istringstream iss(static_cast(update.data()));
		// iss >> zipcode >> temperature >> relhumidity ;
        printf("%d 和 %d  和%d      ",chong.car_two_x,chong.car_one_y,chong.car_one_x);
    }
    return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/461697.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号