Python中的TCP发送错误-套接字的协议类型错误
Posted
技术标签:
【中文标题】Python中的TCP发送错误-套接字的协议类型错误【英文标题】:Error with TCP send in Python - Protocol wrong type for socket 【发布时间】:2020-05-11 20:28:29 【问题描述】:我正在尝试将一个整数值从用 Python 编写的服务器发送到用 C 编写的客户端,当我将 int 值转换为 htonl 以发送到 C 时,如下所示:
size = bytes(socket.htonl(len(input)))
它返回此错误:此行的套接字协议错误类型:
recv = connection.send(size)
如何以这种方式将整数值发送给 C 中的客户端,或者有更简单的方法吗?
【问题讨论】:
请添加您的整个代码。 您看到的错误与整数的序列化无关。这个问题缺少必要的上下文来找出真正导致问题的原因。 【参考方案1】:以后请提供所有相关信息:python 版本、操作系统、回溯,以及在本例中创建套接字的代码。
这篇文章可能解释了正在发生的事情:
http://erickt.github.io/blog/2014/11/19/adventures-in-debugging-a-potential-osx-kernel-bug/
这意味着您的服务器和/或客户端代码中可能存在导致连接在不合时宜的时刻断开的错误。
【讨论】:
我不明白你怎么可能在发送时得到它。连接,是的,发送不。 @user207421 是的,这在send()
上应该是不可能的。我或多或少地重复了另一个似乎相关的***答案。然而,深入挖掘我认为真正的问题是 macOS 的一个怪癖。我已经更新了我的答案。
VG。你引用的奇怪帖子。 所有 errno
值源自内核内部,而不是用户空间,这确实是一个错误,而不是“记录不充分的边缘情况”。它应该给 EPIPE。
@user207421 你错了。例如,libc 中的函数显式设置 errno
是罕见的,但并非闻所未闻。以上是关于Python中的TCP发送错误-套接字的协议类型错误的主要内容,如果未能解决你的问题,请参考以下文章