Bonjour,
J'ai écris 2 petits programmes qui jouent le rôle d'un serveur (avec possibilité de multi-connexion) et d'un client. Outre le fait que je patauge encore un peu et que je n'arrive à envoyer des données que dans un sens (les programmes sont loin d'être parfaits mais j'en fais mon affaire), ces 2 programmes ont pour but final de communiquer d'ordi à ordi au travers le net.
Serveur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from socket import *
from select import *
from mes_packages.mes_fonctions import DicoOrd #un dictionnaire de mon invention qui est ordonné et permet d'avoir autre chose que des int et des str en clef
hote = ''
port=80
 
connexion_principale = socket(AF_INET, SOCK_STREAM)
connexion_principale.bind((hote, port))
connexion_principale.listen(5)
print("Le serveur écoute à présent sur le port {}".format(port))
clients_connectés=DicoOrd()
while 1 :
	demandes,wlist, xlist =select([connexion_principale],[],[],0.05)
	for connexion in demandes:
		connexion_avec_client, infos_connexion = connexion.accept()
		ident=connexion_avec_client.recv(1024)
		ident=ident.decode()
		clients_connectés[connexion_avec_client]=ident
		phrase=ident+" entre dans le salon de chat !"
		print(phrase)
		#passons à l'envoi aux autres usagés
		clients=[]
		if len(clients_connectés) > 1 :
			for client in clients_connectés.keys():
				client.send(phrase.encode())
	for client in clients_connectés.keys() :
		try:
			recu=client.recv(1024)
			print('reçu !')
			print(recu.decode())
			for cli in clients_connectés.keys() :
				cli.send(recu)
		except : pass
Client :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import socket
import select
 
hote="45.34.174.140"#j'ai mis n'importe quoi volontairement mais il correspond à l'ordinateur "serveur"
port=80
ident=input('Entrez votre identifiant : ')
 
connexion_avec_serveur = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connexion_avec_serveur.connect((hote, port))
print("Connexion établie avec le serveur sur le port {}".format(port))
connexion_avec_serveur.send(ident.encode())
msg_a_envoyer = b""
while msg_a_envoyer != b"/fin":
	try:
		raise KeyboardInterrupt
		msg_recu = connexion_avec_serveur.recv(1024)
		if msg_recu!=b"" :
			print(msg_recu.decode()) # Là encore, peut planter s'il y a des accents
	except KeyboardInterrupt:
		msg_a_envoyer = input("> ")
		# Peut planter si vous tapez des caractères spéciaux
		msg_a_envoyer = msg_a_envoyer.encode()
		# On envoie le message
		connexion_avec_serveur.send(msg_a_envoyer)
 
print("Fermeture de la connexion")
connexion_avec_serveur.close()
Le problème est que j'ai eu beau tenter des ports différents, le tout marche bien sur le même ordinateur, normalement sur un réseau partageant la même connexion internet (j'avais testé mais j'ai quelque peu changé le code depuis) mais impossible de communiquer avec 2 ordinateurs connectés à internet avec des livebox différentes. Savez-vous ce que je dois faire ? dois prendre un autre port (j'en ai déjà tenté plein) ?