繁体   English   中英

在我的 python 多人游戏中获取 [WinError 10057](使用 pygame)

[英]Getting an [WinError 10057] in my python multiplayer game (using pygame)

所以我一直在用python和pygame开发一款太空射击时间游戏,并希望使用sockets和网络在游戏中增加多人功能。 游戏还没有完全完成,而且由于我对 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中的错误,但我不完全确定。

你可以在这里看到完整的代码

(忽略test_game.py )查看server.pynetwork.pyclient.py

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

现在到您的问题:它部分与 python 有关,部分与 sockets 有关。 你说你对两者都是新手,所以我会在最基本的层面上解释它。

Python

当您的python代码不在 function 本身或不是特殊function 的一部分时,将立即执行此代码。 即,如果我有两个文件a.pyb.py

#a.py

raise Exception("Some Exception")

和 b.py

#b.py
import a

print("some code")

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

一个.py

#a.py (modified)

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

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

Sockets

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

换句话说:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM