0mq:无法在远程客户端上接收数据

时间:2014-11-25 19:35:27

标签: connection zeromq

我使用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

1 个答案:

答案 0 :(得分:0)

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

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

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