alors voila, j'ai suivis un cours pour crée un jeu de ping pong en réseau, mais quand je lance le server (tout va bien) et au moment de lancer client j'ai un jolie message d'erreur qui me dit connections refusé, l'ordinateur cible a expressément refusé. je suis sur que mon erreur et toute bête (un point que je n'ai pas compris)
edit
j'ai bien remis le même port, maintenant le jeu se ferme au bout de quelques instant avec ce message en console :
ConnectionResetError: [WinError 10054] Une connexion existante a dû être fermée par l’hôte distant
le server:
import pygame
import sys
import random
import math
import socket
import threading
from player import Player
from ball import Ball
class Game:
def __init__(self):
self.server = socket.socket()
self.ip, self.port = 'localhost', 5939
self.client_socket, self.adress = None, None
self.server.bind((self.ip, self.port))
self.server.listen(1)
self.position_y = 250
self.screen = pygame.display.set_mode((900, 500))
pygame.display.set_caption("ping pong")
self.clock = pygame.time.Clock()
self.running = True
self.player_1_x, self.player_1_y = 20, 250
self.player_2_x, self.player_2_y = 860, 250
self.player_taill = [20, 80]
self.speed_y_1, self.speed_y_2 = 0, 0
self.player1 = Player(self.player_1_x, self.player_1_y, self.player_taill)
self.player2 = Player(self.player_2_x, self.player_2_y, self.player_taill)
self.ball_fire = False
self.ball_direction = [-1, 1]
self.ball_speed_x, self.ball_speed_y = 15, 2
self.ball = Ball(450, 250, [10, 10], random.choice(self.ball_direction))
self.rect = pygame.Rect(0, 0, 900, 500)
self.score_1, self.score_2 = 0, 0
def run(self):
self.creat_thread(self.connect_wait)
while self.running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
self.speed_y_2 = -10
if event.key == pygame.K_DOWN:
self.speed_y_2 = 10
if event.key == pygame.K_s:
self.speed_y_1 = 10
if event.key == pygame.K_z:
self.speed_y_1 = -10
if event.key == pygame.K_SPACE:
self.ball_fire = True
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP:
self.speed_y_2 = 0
if event.key == pygame.K_DOWN:
self.speed_y_2 = 0
if event.key == pygame.K_s:
self.speed_y_1 = 0
if event.key == pygame.K_z:
self.speed_y_1 = 0
self.player2.rect.y = int(self.position_y)
self.player1.move(self.speed_y_1)
self.player2.move(self.speed_y_2)
self.player1.rect.clamp_ip(self.rect)
self.player2.rect.clamp_ip(self.rect)
self.screen.fill((50, 50, 50))
if self.ball_fire:
self.ball.move(self.ball_speed_x, self.ball_speed_y)
if self.player1.rect.colliderect(self.ball.rect) or self.player2.rect.colliderect(self.ball.rect):
self.ball_speed_x = self.change_direction(self.ball_speed_x, 0)
self.ball_speed_y = self.change_direction(self.ball_speed_y, 60)
if self.ball.rect.top <= 0 or self.ball.rect.bottom >= 500:
self.ball_speed_y = self.change_direction(self.ball_speed_y, 0)
if self.ball.rect.right >= 915:
self.ball.rect.x, self.ball.rect.y = 450, 250
self.score_1 += 1
self.ball_fire = False
if self.ball.rect.left <= -15:
self.ball.rect.x, self.ball.rect.y = 450, 250
self.score_2 += 1
self.ball_fire = False
self.ball.rect.clamp_ip(self.rect)
self.ball.update(self.screen)
self.player1.update(self.screen)
self.player2.update(self.screen)
if not self.ball_fire:
self.message('grande', f"Jeu Pong de just1", [100, 50, 20, 20], (255, 255, 255))
self.message('grande', f"{ self.score_1 }", [300, 200, 50, 50], (255, 255, 255))
self.message('grande', f"{ self.score_2 }", [600, 200, 50, 50], (255, 255, 255))
self.message('petite', "pour commencer appuyer sur espace", [100, 300, 20, 20], (255, 255, 255))
pygame.display.flip()
self.clock.tick(60)
def change_direction(self, speed, angle):
speed = - (speed * math.cos(angle))
return speed
def message(self, font, message, message_rectangle, color):
if font == 'petite':
font = pygame.font.Font(r"C:\Users\Admin\Documents\programation\python\jeux\AtariClassicChunky-PxXP.TTF", 20)
if font == 'moyenne':
font = pygame.font.Font(r'C:\Users\Admin\Documents\programation\python\jeux\AtariClassicChunky-PxXP.TTF', 30)
if font == 'grande':
font = pygame.font.Font(r'C:\Users\Admin\Documents\programation\python\jeux\AtariClassicChunky-PxXP.TTF', 40)
message = font.render(message, True, color)
self.screen.blit(message, message_rectangle)
def connect_wait(self):
self.client_socket, self.adress = self.server.accept()
self.recev_data()
def recev_data(self):
while True:
self.position_y = self.client_socket.recv(128).decode('utf-8')
def creat_thread(self, cible):
thread = threading.Thread(target=cible)
thread.daemon = True
thread.start()
if __name__ == "__main__":
pygame.init()
game = Game()
game.run()
le client :
import pygame
import sys
import random
import math
import socket
import threading
from player import Player
from ball import Ball
class Game:
def __init__(self):
self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.ip , self.port = "localhost", 5939
self.screen = pygame.display.set_mode((900, 500))
pygame.display.set_caption("ping pong")
self.clock = pygame.time.Clock()
self.running = True
self.player_1_x, self.player_1_y = 20, 250
self.player_2_x, self.player_2_y = 860, 250
self.player_taill = [20, 80]
self.speed_y_1, self.speed_y_2 = 0, 0
self.player1 = Player(self.player_1_x, self.player_1_y, self.player_taill)
self.player2 = Player(self.player_2_x, self.player_2_y, self.player_taill)
self.ball_fire = False
self.ball_direction = [-1, 1]
self.ball_speed_x, self.ball_speed_y = 15, 2
self.ball = Ball(450, 250, [10, 10], random.choice(self.ball_direction))
self.rect = pygame.Rect(0, 0, 900, 500)
self.score_1, self.score_2 = 0, 0
def run(self):
self.client.connect((self.ip, self.port))
while self.running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
self.speed_y_2 = -10
if event.key == pygame.K_DOWN:
self.speed_y_2 = 10
if event.key == pygame.K_SPACE:
self.ball_fire = True
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP:
self.speed_y_2 = 0
if event.key == pygame.K_DOWN:
self.speed_y_2 = 0
position_player_2_y = f"{ self.player2.rect
.y }"
self.client.send(position_player_2_y.encode('utf-8'))
self.player1.move(self.speed_y_1)
self.player2.move(self.speed_y_2)
self.player1.rect.clamp_ip(self.rect)
self.player2.rect.clamp_ip(self.rect)
self.screen.fill((50, 50, 50))
self.ball.update(self.screen)
self.player1.update(self.screen)
self.player2.update(self.screen)
pygame.display.flip()
self.clock.tick(60)
def change_direction(self, speed, angle):
speed = - (speed * math.cos(angle))
return speed
def message(self, font, message, message_rectangle, color):
if font == 'petite':
font = pygame.font.Font(r"C:\Users\Admin\Documents\programation\python\jeux\AtariClassicChunky-PxXP.TTF", 20)
if font == 'moyenne':
font = pygame.font.Font(r'C:\Users\Admin\Documents\programation\python\jeux\AtariClassicChunky-PxXP.TTF', 30)
if font == 'grande':
font = pygame.font.Font(r'C:\Users\Admin\Documents\programation\python\jeux\AtariClassicChunky-PxXP.TTF', 40)
message = font.render(message, True, color)
self.screen.blit(message, message_rectangle)
def creat_thread(self, cible):
thread = threading.Thread(target=cible)
thread.daemon = True
thread.start()
if __name__ == "__main__":
pygame.init()
game = Game()
game.run()
d'accord je pense que je vais réviser un peu et m'y attarder plus tard mieux armé.
merci pour vos réponse
- Edité par justinleroy4 23 décembre 2024 à 18:31:36
j'ai bien remis le même port, maintenant le jeu se ferme au bout de quelques instant avec ce message en console :
ConnectionResetError: [WinError 10054] Une connexion existante a dû être fermée par l’hôte distant
Probablement du à une erreur de protocole se traduisant par un crash du serveur.
C'est du boulot que la mise au point d'un tel programme et vu comment il est écrit la conception est loin d'être robuste.
Essayez de fournir de quoi reproduire et espérez que quelqu'un voudra bien y passer du temps.
Exemple minimaliste qui reproduit le message d'erreur:
import socket
import threading
HOST, PORT = 'localhost', 9090
def client(host, port):
sd = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sd.connect((host, port))
for x in range(100):
sd.send(str(x*100).encode())
sd.close()
def server(host, port):
sd = socket.socket()
sd.bind((host, port))
sd.listen(1)
cs, _ = sd.accept()
data = cs.recv(128)
sd.close()
s = threading.Thread(target=server, args=(HOST, PORT))
s.daemon = True
s.start()
client(HOST, PORT)
s.join()
et cela corrigé, il y aura encore des soucis: la programmation réseau n'est pas si simple. Difficile d'expliquer en quelques lignes des concepts où les tutos s'étendent sur des chapitres entiers.
- Edité par mps 24 décembre 2024 à 19:26:25
la connections existante a du être fermer
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
Le Tout est souvent plus grand que la somme de ses parties.