我在C(使用nanomsg),其应使用Python脚本(使用标准的 '插座' 实现)通信经由TCP创建套接字服务器C代码(没有错误处理):Socket连接
#include <nanomsg/nn.h>
#include <nanomsg/pair.h>
...
char buf[23];
...
socket = nn_socket(AF_SP, NN_PAIR);
nn_bind(socket, "tcp://127.0.0.1:xxxxx");
...
nn_recv(socket, buf, sizeof(buf), 0);
...
nn_shutdown(socket, endpoint_id);
的Python代码:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("127.0.0.1", xxxxx))
s.send('Hello C this is Python')
s.close()
连接到插座时(如果C应用程序正在运行)没有错误在Python。但是,C脚本在方法nn_recv中空转,并且根本没有获取任何数据。我究竟做错了什么?
首先,我在shell中启动C代码(它在方法nn_recv中空闲)。然后,我在另一个shell中启动Python,并期望C应用程序接收数据。这两个脚本执行没有错误。
确定插座匹配的类型?不应该都是SOCK_STREAM或NN_PAIR。在不同的ZeroMq中,套接字只是等待连接,直到合适的套接字变为可用。 – hetepeperfan 2015-02-11 14:01:37
研究图书馆的文档,看起来'nn_socker'必须具有'NN_PULL'标志用于这种特殊情况。 – Matt 2015-02-11 14:01:37
在'“tcp://127.0.0.1:xxxxx”'中,是否将'xxxxx'识别为有效的端口?它应该是10000? – ryyker 2015-02-11 15:07:06