ZeroMQ PUB / SUB示例将无法从EC2工作到专用IP

时间:2013-07-10 17:00:48

标签: amazon-ec2 zeromq

我是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地址。

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

0 个答案:

没有答案