【问题标题】:Error with TCP send in Python - Protocol wrong type for socketPython中的TCP发送错误-套接字的协议类型错误
【发布时间】:2020-05-11 20:28:29
【问题描述】:

我正在尝试将一个整数值从用 Python 编写的服务器发送到用 C 编写的客户端,当我将 int 值转换为 htonl 以发送到 C 时,如下所示:

size = bytes(socket.htonl(len(input)))

它返回此错误:此行的套接字协议错误类型:

recv = connection.send(size)

如何以这种方式将整数值发送给 C 中的客户端,或者有更简单的方法吗?

【问题讨论】:

  • 请添加您的整个代码。
  • 您看到的错误与整数的序列化无关。这个问题缺少必要的上下文来找出真正导致问题的原因。

标签: python sockets tcp byte send


【解决方案1】:

以后请提供所有相关信息:python 版本、操作系统、回溯,以及在本例中创建套接字的代码。

这篇文章可能解释了正在发生的事情:

http://erickt.github.io/blog/2014/11/19/adventures-in-debugging-a-potential-osx-kernel-bug/

这意味着您的服务器和/或客户端代码中可能存在导致连接在不合时宜的时刻断开的错误。

【讨论】:

  • 我不明白你怎么可能在发送时得到它。连接,是的,发送不。
  • @user207421 是的,这在send() 上应该是不可能的。我或多或少地重复了另一个似乎相关的stackoverflow答案。然而,深入挖掘我认为真正的问题是 macOS 的一个怪癖。我已经更新了我的答案。
  • VG。你引用的奇怪帖子。 所有 errno 值源自内核内部,而不是用户空间,这确实是一个错误,而不是“记录不充分的边缘情况”。它应该给 EPIPE。
  • @user207421 你错了。例如,libc 中的函数显式设置 errno 是罕见的,但并非闻所未闻。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-21
  • 2014-07-11
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
相关资源
最近更新 更多