【问题标题】:Python sockets [WinError 10038] An operation was attempted on something that is not a socketPython 套接字 [WinError 10038] 尝试对非套接字的操作进行操作
【发布时间】:2018-07-03 14:54:01
【问题描述】:

这不是重复的。

我已经搜索了几个小时才能找到答案,但没有运气,所以我在这里问。

我目前正在使用 python 的 socket 模块构建一个聊天服务器。当我运行服务器时,在客户端连接并且服务器这么说之后,我收到一个异常:

[WinError 10038] An operation was attempted on something that is not a socket

我已经构建了一个大大减少的服务器,它可以在这个服务器没有的地方工作。这让我很困惑,因为它几乎一行一行地做同样的事情。

tcpServer.py

tcpClient.py

简化:

testServer.py

testClient.py

【问题讨论】:

  • 您应该在您的问题中包含代码,并准确确定问题发生的位置。见How to Ask
  • 话虽这么说......这个序列有什么问题? clientSocket.recvclientSocket.shutdownclientSocket.closeclientSocket.recv 也许shutdownclose 没有正确缩进?
  • 这里是一些更新的代码:pastebin.com/QvC62Faq
  • 看来我复制了一些代码。可能在我尝试调试时。
  • 再说一遍:pastebin.com/KiDVX9ey

标签: python python-3.x sockets python-sockets


【解决方案1】:

让我为你澄清几件事:

  • 在服务器端:您创建一个套接字,绑定它,然后侦听连接。
  • 在客户端:您创建一个套接字,然后您尝试连接到服务器。

在您的情况下,服务器端很好,但是,在客户端,您需要删除此行:

s.bind(("127.0.0.1",port))

例如,您通常会这样做:

ip = '127.0.0.1'
port = 1234
s.connect((ip, port))
s.send("hello".encode("utf-8"))
while True:
    s.send(input().encode("utf-8"))

【讨论】:

  • 删除了客户端中的 s.bind() 行,但仍然出现相同的异常,但谢谢。
  • 确保您的缩进是正确的,并且您正在正确关闭套接字,因为这就是您收到此错误的原因,我认为您正在尝试使用调用关闭或类似的东西后的套接字。希望它对你有用
  • 改正我的缩进后我仍然有这个错误。
猜你喜欢
  • 1970-01-01
  • 2015-02-06
  • 1970-01-01
  • 2021-09-01
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
相关资源
最近更新 更多