首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C (nanomsg)和Python (非nanomsg)之间的套接字连接

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

Stack Overflow用户
提问于 2015-02-11 13:48:05
回答 1查看 1.5K关注 0票数 3

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

C-代码(无错误处理):

代码语言:javascript
复制
#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-代码:

代码语言:javascript
复制
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应用程序接收数据。这两个脚本执行时都没有错误。

EN

回答 1

Stack Overflow用户

发布于 2016-10-30 19:16:12

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

请参见nanomsg SP协议头:

代码语言:javascript
复制
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套接字的原始TCP send都将终止连接,因为它不确认到SP协议。

有关更多信息,请参阅sp映射-01.txt文档here

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28455978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档