在创建了一个小 pygame 程序之后,我希望让它对多人游戏友好,并且可以在本地玩。我的目标是让我的世界里有两个独立的玩家!
所以,我基本上尝试学习如何使用python的socket模块。
好的,让我们进去,我的第一次尝试是在基本服务器上连接客户端。
我遵循一个非常好的教程并获得基于此结构的最终代码:
#server.py
import socket
from threading import Thread
class Serv(Thread):
def __init__(self, conn):
Thread.__init__(self)
self.conn = conn
def run(self):
data = self.conn.recv(1024)
data = data.decode("utf8")
print(data)
host, port = ('', 8486)
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.bind((host, port))
run = True
while run :
socket.listen(5)
conn, adress = socket.accept()
thread_serv = Serv(conn)
thread_serv.start()
conn.close()
socket.close()
和 :
#client.py
import socket
host, port = ('localhost', 8486)
try:
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.connect((host, port))
print("You're in !")
data = "bonjour"
data = data.encode("utf8")
socket.sendall(data)
except ConnectionRefusedError:
print("There is no server to join !")
except :
print("connexion lost...")
finally:
socket.close()
我第一次运行这两个程序(先是 server.py ,然后是 client.py ),一切正常。
但是当我第二次运行它时,控制台返回给我:
Traceback (most recent call last):
File "C:\Users\Cédric\Documents\logiciels\python\By Edhyjox\Tower\bin\serveur.py", line 20, in <module>
socket.bind((host, port))
OSError: [WinError 10048] Une seule utilisation de chaque adresse de socket (protocole/adresse réseau/port) est habituellement autorisée
[Finished in 0.1s]
如果我给你翻译最后一行,它会处理这样的事情: Only one use of each socket address ( protocol/network address/port) is usually allowed
我知道它来自端口,因为当我更改它时,它会再次工作,直到我不使用同一个端口两次。
但是有没有办法重置所有使用的端口并使其再次可用?
您的代码尝试listen
多次调用。这是错误的。listen
预计被调用一次,只需accept
为每个新连接调用。你的代码应该是:
...
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.bind((host, port))
socket.listen(5)
run = True
while run :
conn, adress = socket.accept()
thread_serv = Serv(conn)
thread_serv.start()
conn.close()
socket.close()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句