IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> zeromq 发布-订阅 c++与python互传 -> 正文阅读

[Python知识库]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 <zmq.hpp>
#include <iostream>
#include <sstream>

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<char*>(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 <zmq.hpp>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

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 <zmq.hpp>
#include <iostream>
#include <sstream>
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<char*>(update.data()));
		// iss >> zipcode >> temperature >> relhumidity ;
        printf("%d 和 %d  和%d      ",chong.car_two_x,chong.car_one_y,chong.car_one_x);
    }
    return 0;
}
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-11-11 12:39:47  更:2021-11-11 12:41:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 22:56:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码