我是zeromq的菜鸟,我正在尝试使用它从AWS上的Ubuntu 12.04微实例发送到我的家用电脑 . 这是我在家用电脑上在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地址上运行时没有任何反应 .

我在亚马逊实例上使用了错误的地址吗?格式错误吗?我不禁觉得有一些非常基本的东西我做错了,因为这对我来说都很新鲜 . 如果您需要更多信息,请告诉我们 . 任何帮助非常感谢,谢谢 .