【问题标题】:Getting an [WinError 10057] in my python multiplayer game (using pygame)在我的 python 多人游戏中获取 [WinError 10057](使用 pygame)
【发布时间】:2021-08-17 19:54:00
【问题描述】:

所以我一直在使用 python 和 pygame 开发一款太空射击时间游戏,并希望使用套接字和网络在游戏中添加多人游戏功能。游戏还没有完全完成,而且我对 python 还很陌生(甚至对套接字也很陌生),所以我的代码不是很优雅。

每当我运行服务器时,都会弹出此错误:

[WinError 10057] A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied
Traceback (most recent call last):
  File "C:\Users\user\PycharmProjects\Space_shooter(original_game)\server.py", line 3, in <module>
    from client import Ship
  File "C:\Users\user\PycharmProjects\Space_shooter(original_game)\client.py", line 163, in <module>
    p.r = 0
AttributeError: 'NoneType' object has no attribute 'r'

我认为最后一部分 -- "has no attribute 'r'" -- 是因为 server.pynetwork.py 中的错误,但我不完全确定。

可以查看完整代码here

(无视test_game.py) 查看server.pynetwork.pyclient.py

【问题讨论】:

  • 您在network.Network.connect 中遇到错误,但由于您有一个except: pass 语句,所以您不知道是哪个。永远,never 在任何地方都有except: pass 声明。至少打印异常。
  • 所以我会做这样的事情吗:除了 socket.error as e: print(e) (对不起,如果这是一些非常基本的网络编程——我对此很陌生)跨度>
  • 好的,我试了一下,出现了这个错误(连同问题中的那个):[WinError 10061] 无法建立连接,因为目标机器主动拒绝了它
  • 您确实需要删除所有 try .. except 语句。如果目标拒绝它,这意味着没有服务器在运行。这可能意味着您在 server.py 文件的某处遇到异常并且正在抑制它,或者您甚至没有执行它。

标签: python sockets networking server pygame


【解决方案1】:

查看了您的代码。一般来说,如果您想获得帮助,请尝试按照here 中的指南进行操作。换句话说,为我们提供展示错误所需的最少代码 sn-p,否则会浪费大量时间来找出问题所在。也不建议像这样组织一个 GH 存储库,将所有不同的工件放在同一个地方,等等等等。

现在你的问题:它部分与 python 有关,部分与套接字有关。你说你对两者都是新手,所以我会尽可能地在最基本的层面上解释它。

Python

当你有一个 Python 代码 IS NOT 在函数本身中或不是特殊 main 函数的一部分时,此代码将立即执行。即,如果我有两个文件 a.pyb.py

#a.py

raise Exception("Some Exception")

和 b.py

#b.py
import a

print("some code")

如果我尝试执行 b.py,我不会看到“某些代码”,而是会看到“某些异常”出现。现在,如果我修改 a.py 以使用特殊的 ma​​in 函数,或者即使我将异常引发放在函数本身中,这个问题也会消失。即,

a.py

#a.py (modified)

if __name__ == '__main__':
    raise Exception("Some Exception")

现在,如果我尝试执行 b.py,我会看到正在打印的一些代码。

套接字

现在您知道了这一点,我们可以看到套接字问题是什么。在您的 server.py 中,您正在导入客户端脚本。这将尝试执行 client.py 中从第 118 行开始的所有代码,然后再进行下一次导入。在这部分代码中,您正在尝试连接到服务器。但是,服务器尚未侦听传入连接(即使此时尚未创建),因为您是在服务器代码的第 16 行执行此操作。

换句话说:

  1. 避免在 python 中转储不属于函数的代码。
  2. 确保在您尝试将客户端连接到它之前创建您的服务器。

【讨论】:

    猜你喜欢
    • 2020-07-26
    • 2015-05-06
    • 2021-03-20
    • 1970-01-01
    • 2014-09-20
    • 2019-07-05
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多