【问题标题】:0mq: cannot receive data on remote client0mq:无法在远程客户端接收数据
【发布时间】:2014-12-04 06:06:36
【问题描述】:

我已经使用 jeromq 0.3.2 在 java 中使用 PUB/SUB 实现了一个简单的客户端和一个服务器。

如果我在本地执行这两个程序,客户端会收到数据。如果我在远程计算机上部署相同的客户端 jar 并运行它,我不会收到任何消息。在这两种情况下,客户端都使用服务器的 ip。对于远程部署,此处没有任何更改。

防火墙也不应该成为问题,如下面的 netstat 摘录所示。服务器(用于测试目的,我的 Macbook Air)也不会阻止任何传出流量。

有什么提示吗?不知何故,我无法发现错误(可能是一些愚蠢的东西,但太盲目了……)

Server.java

ZMQ.Context context = ZMQ.context(1);
ZMQ.Socket publisher = context.socket(ZMQ.PUB);
publisher.bind("tcp://*:5556"); 

Client.java

ZMQ.Context context = ZMQ.context(1);
ZMQ.Socket  subscriber = zmqContext.socket(ZMQ.SUB);
subscriber.connect("tcp://192.168.178.21:5556");
subscriber.subscribe("".getBytes());

防火墙也不应该是个问题

 netstat -a ] grep 5556 

tcp        0      1 192.168.178.29:38145    192.168.178.21:5556     SYN_SENT

最后是我的 iptables 配置,以防我在这里犯了一个愚蠢的配置错误。

*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1161:105847]
-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.178.0/24 -j ACCEPT
COMMIT

【问题讨论】:

    标签: connection zeromq


    【解决方案1】:

    事实上,问题不在于客户端上的代码或防火墙。

    我的发送计算机 (Macbook Air) 有一个防火墙规则处于活动状态,它不允许任何传入连接。这就是为什么连接总是停留在 SYN_SENT 中的原因。在检查防火墙规则时,我忽略了这一点。

    我收到的关于在基于 *nix 的系统上跟踪与 0mq(或一般 tcp)相关的问题的一般建议:tcpdump、ngrep、netcat

    【讨论】:

      猜你喜欢
      • 2013-08-29
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-24
      相关资源
      最近更新 更多