C(nanomsg)和Python(nonnanomsg)之间的套接字连接

2024-04-29 09:26:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我用C语言创建了一个socket服务器(使用nanomsg),它将通过TCP与Python脚本(使用标准的“socket”实现)通信:

C代码(无错误处理):

#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代码:

^{pr2}$

连接到套接字时Python中没有错误(如果C应用程序正在运行)。但是,C脚本在nn_recv方法中处于空闲状态,根本没有获取任何数据。我做错什么了?在

首先,我在shell中启动C代码(它在nn_recv方法中处于空闲状态)。然后在另一个shell中启动Python,并期望C应用程序接收数据。两个脚本都能正常执行。在


Tags: 方法代码服务器脚本应用程序include状态nn
1条回答
网友
1楼 · 发布于 2024-04-29 09:26:31

问题是nanomsg套接字类型不是普通的标准TCP类型。协议不匹配。您不能将TCP消息发送到nanomsg套接字并期望nn_recv将工作,因为该消息将不符合定义的nanomsg SP协议要求。在

请参阅nanomsg SP协议头:

0                1               2                3
0 1 2 3 4 5 6 7  8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3  4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      0x00     |      0x53     |      0x50     |    version    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             type              |           reserved            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

协议头的前四个字节用于确保对等方的协议与本地端点使用的协议兼容。在

如果从对等方接收到的协议头不同,则必须立即关闭TCP连接。在

这意味着任何到nanomsg套接字的原始TCPsend都将终止连接,因为它不符合SP协议。在

有关详细信息,请参阅sp-tcp-mapping-01.txt文档here

相关问题 更多 >