После создания небольшой программы Pygame, я хочу сделать ее удобной для многопользовательской игры, с возможностью играть локально.Моя цель - позволить двум независимым игрокам в моем мире!
Итак, я в основном пытался научиться использовать модуль сокетов python.
Хорошо, давайте начнем, мой первыйбыла попытка подключить клиента к базовому серверу.
Я следую очень хорошему руководству и получаю окончательный код, основанный на этой структуре:
#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
Я знаю, что это приходит из порта, потому что, когда я изменяю его, он снова работает, пока я неt использовать два раза один и тот же порт.
Но есть ли способ сбросить все используемые порты и сделать их снова пригодными для использования?