簡體   English   中英

帶有AWS EC2的ZeroMQ服務器/客戶端

[英]ZeroMQ server/client with AWS EC2

您好,我編寫了一個非常簡單的ZMQ服務器和客戶端應用程序。 它在我的本地計算機上運行良好,並且如果我在AWS(相同的安全組)中運行兩個應用程序,則也可以正常運行。 我嘗試在AWS安全組(入站和出站)中打開正確的端口。 我什至將它們打開為所有端口/地址上的所有流量。 但是我沒有在客戶端上收到已發布的消息。

我的客戶代碼看起來像這樣

#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 (int argc, char* argv[])
{
     std::string adrStr = argv[1];
     zmq::context_t context (1);
     zmq::socket_t subscriber (context, ZMQ_SUB);

     std::cout << "Connecting to server..." << std::endl;
     subscriber.connect(adrStr.c_str());
     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;
}

我的服務器端代碼如下所示

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

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

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

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

    int cnt =0;
    while(1)
    {
         char buffer[30];
         int msgn=0;
         msn = sprint_s(buffer, "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;
 }

在客戶端應用程序命令行中,我嘗試傳遞正確格式為“ TCP:// public-dns:5556”的公共DNS,我也嘗試使用公共TCP / IP

有人知道我可能會想念什么嗎?

嘗試設置一個彈性IP地址,並將其與路由53 dns名稱綁定並使用它。 它應該解析為AWS網絡上機器的專用IP地址。 永遠不會保證僅使用私有IP或私有dns名稱不會保持不變。

好的,感謝一位幫助我弄清楚這里發生了什么的朋友,答案是:

基本上,該應用程序在Windows Server 2012實例上運行,而Windows防火牆阻止了對我的應用程序的任何通信。 將應用程序添加到Windows防火牆的允許的應用程序列表中就可以了。

因此,這里總結了如何使其工作

我的服務器應用程序現在綁定到tcp:// *:5556,我的客戶端連接到tcp:// public-ip:5556

通過EC2控制台管理,添加安全組規則

端口5556上的自定義TCP Aywhere

在服務器上,請確保將服務器可執行文件添加到允許的應用程序列表中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM