[英]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.