Bonjour,
Avec le module socket de python, j'ai écrit deux programmes très simples qui permettent une communication client/serveur entre deux ordinateurs. J'exécute ces programmes sur des ordinateurs tournant sous Windows

programme 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
34
35
36
37
38
39
40
41
42
# Le serveur attend la connexion d'un client, pour entamer un dialogue avec lui
import socket
from time import time
 
HOST = '192.174.0.56' # adresse ip du serveur
PORT = 50000
CODE = 'utf8'
 
mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 
try :
    mySocket.bind((HOST, PORT))
except socket.error :
    print("La liaison du socket à l'adresse choisie a échoué.")
    raise
 
while 1 :
    print("Serveur prêt, en attente de requêtes ...")
    mySocket.listen(5)
 
    connexion, adresse = mySocket.accept()
    print(f"Client connecté, adresse IP {adresse[0]}, port {adresse[1]}")
 
    connexion.send(bytes("Vous êtes connecté au serveur. "+\
                         "Envoyez vos messages.", CODE))
 
    clientMsg = connexion.recv(1024).decode(CODE)
    while 1 :
        print("C>", clientMsg)
        if clientMsg.lower() == "stop" or clientMsg == "" :
            serverMsg = '__STOP'
            connexion.send(bytes(serverMsg, CODE))
            break
        serverMsg = str(time())
        print('S>', serverMsg)
        # le serveur répond en affichant le temps
        connexion.send(bytes(serverMsg, CODE))
        clientMsg = connexion.recv(1024).decode(CODE)
 
    connexion.send(bytes("Au revoir !", CODE))
    print("Connexion interrompue.")
    connexion.close()
programme 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, sys
 
HOST = '192.174.0.56' # adresse ip du serveur
PORT = 50000
CODE = 'utf8'
 
connexion = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 
try :
    connexion.connect((HOST, PORT))
except socket.error :
    print("La connexion a échoué.")
    sys.exit()    
print("Connexion établie avec le serveur.")
 
serverMsg = connexion.recv(1024).decode(CODE)
 
while 1 :
    if serverMsg == "__STOP" :
        break
    print("S>", serverMsg)
    clientMsg = input("C> ")
    connexion.send(bytes(clientMsg, CODE))
    serverMsg = connexion.recv(1024).decode(CODE)
 
print("Connexion interrompue.")
connexion.close()
Ces deux programmes fonctionnent très bien lorsque le client et le serveur sont deux ordinateurs qui sont connectés en réseau local dans la même maison. Cependant, si je veux que le client et le serveur puissent être dans deux maisons différentes, il faut qu'ils communiquent par internet. Pour cela, j'ai cru comprendre qu'il fallait remplacer l'adresse ip HOST par l'adresse internet de l'ordinateur qui exécute le programme serveur. J'ai récupéré cette dernière adresse grâce au site internet https://www.whatismyip.com/
Supposons par exemple que l'adresse ip internet de l'ordinateur qui exécute le programme serveur soit 98.124.101.65
Lorsque j'exécute le programme serveur avec cette dernière adresse, python lève l'exception suivante :
OSError: [WinError 10049] L’adresse demandée n’est pas valide dans son contexte
Que dois-je faire pour que les deux ordinateurs puissent communiquer via internet ?