0

我是 zeromq 的菜鸟,我正在尝试使用它从 AWS 上的 Ubuntu 12.04 微型实例向我的家用 PC 发送消息。这是我在我的家用电脑上在 msvc++ 下运行的订阅者代码:

#include "stdafx.h"
#include <string>
#include <iostream>
#include "zmq.hpp"

static std::string s_recv (zmq::socket_t &socket) {
    zmq::message_t message;
    socket.recv(&message);
    return std::string(static_cast<char*>(message.data()), message.size()-1);
}

int main () {
zmq::context_t context (1);
zmq::socket_t subscriber (context, ZMQ_SUB);

std::cout << "Connecting to port 5556..." << std::endl;
subscriber.connect("tcp://ec2-23-22-38-77.compute-1.amazonaws.com:5556");
const char *filter ="Sending ";

subscriber.setsockopt(ZMQ_SUBSCRIBE, filter ,strlen(filter));

int update_nbr=0;
for (update_nbr=0; update_nbr<100; update_nbr++){
    zmq::message_t update;
    std::string msg_s=s_recv(subscriber);
    std::cout<<"Received something..."<<msg_s<<std::endl;
}

return 0;
}

这是我在 AWS 实例上运行的发布者代码,由 g++ 编译

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

static std::string s_recv (zmq::socket_t &socket) {

zmq::message_t message;
socket.recv(&message);

return std::string(static_cast<char*>(message.data()), message.size()-1);
}

int main () {
//  Prepare our context and socket
zmq::context_t context (1);
zmq::socket_t publisher (context, ZMQ_PUB);

std::cout << "Binding to port 5556..." << std::endl;


publisher.bind("tcp://*:5556");

int cnt =0;
while(1){


    char buffer[30];
    int msgn=0;
    msgn=snprintf(buffer, 30, "Sending number %d", cnt);
    std::cout<<buffer<<std::endl;
    zmq::message_t message(30);
    memcpy((void*) message.data(), buffer,30);

    publisher.send(message);

    sleep(1);
    cnt++;
}

return 0;
}

两台计算机都安装了 ZeroMQ 3.2.3 版本。

当我在 AWS 实例上本地运行两者时(将 tcp 地址替换为“tcp://localhost:5556”),当两者都在我的家用电脑上时,它工作正常且相同,但是当我在不同的 IP 地址上运行它们时没有任何反应。

我是否为亚马逊实例使用了错误的地址?是不是格式错误?我不禁觉得我做错了一些非常基本的事情,因为这对我来说都是全新的。如果您需要更多信息,请告诉我。非常感谢任何帮助,谢谢。

4

0 回答 0