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发送错误-套接字的协议类型错误的主要内容,如果未能解决你的问题,请参考以下文章

Python3 & TCP协议和UDP协议的特点和区别

Python网络编程之TCP 客户端程序开发

Python网络编程之TCP服务端程序开发

TCP协议详解

python之socket(套接字)

Python网络编程02/基于TCP协议的socket简单的通信