C(nanomsg)和Python(非nanomsg)之间的套接字连接
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C(nanomsg)和Python(非nanomsg)之间的套接字连接,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1626字,纯文字阅读大概需要3分钟。
内容图文
![C(nanomsg)和Python(非nanomsg)之间的套接字连接](/upload/InfoBanner/zyjiaocheng/725/8f53a38d5d86469ab86769061153e757.jpg)
我在C中创建了一个套接字服务器(使用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的代码:
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()
连接到套接字时,Python中没有错误(如果C应用程序正在运行).但是,C脚本在方法nn_recv中空闲,并且根本不获取任何数据.我究竟做错了什么?
首先,我在shell中启动C代码(它在方法nn_recv中空闲).然后我在另一个shell中启动Python并期望C应用程序接收数据.两个脚本都可以正确执行.
解决方法:
问题是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套接字的任何原始TCP将终止连接,因为它不会向SP协议确认.
有关更多信息,请参阅sp-tcp-mapping-01.txt文档here
内容总结
以上是互联网集市为您收集整理的C(nanomsg)和Python(非nanomsg)之间的套接字连接全部内容,希望文章能够帮你解决C(nanomsg)和Python(非nanomsg)之间的套接字连接所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。