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 :
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
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
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) ?
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()
Partager