Bonjour,
J'aimerai réaliser un programme faisant appel au réseau. Jusque là rien de compliqué.
Le problème est que dans ce programme, il y a 2 serveurs qui doivent communiquer entre eux.
Un petit schéma, ça sera tout suite plus clair (les étapes sont numérotées) :
- en jaune le serveur physique
- en vert les clients physiques
Dans l'exemple, on voit que la brique "Socket TCP (client)" sert de console d'administration et pilote tout le programme. C'est elle qui envoie les ordres.
Elle demande de voir les différences du fichier "file1".
La question est la suivante :
Comment dois-je m'y prendre pour faire communiquer les 2 sockets (Serveur) entre elles ?
En effet, j'utilise SocketServer qui est franchement pratique mais le handler se trouve dans une classe à part. Je ne peux donc pas récupérer "self.wfile" et "self.rfile" des 2 sockets dans une méthode qui gèrerait le dialogue entre les 2 serveurs.
Je vous met en exemple un client/serveur bateau avec SocketServer :
exemple de serveur :
exemple de 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 import SocketServer import socket class SimpleTCPServer(SocketServer.ThreadingTCPServer): def __init__(self, ip, port, handler): SocketServer.ThreadingTCPServer.__init__(self, (ip, port), handler) def start(self): try: self.serve_forever() except KeyboardInterrupt as e: self.socket.shutdown(socket.SHUT_RDWR) self.socket.close() class SimpleTCPHandler(SocketServer.StreamRequestHandler): def handle(self): print("New connection from %s:%d" %self.client_address) self.wfile.write("Welcome to server") print(self.rfile.readline().strip()) if __name__ == "__main__": server = SimpleTCPServer("localhost", 2001, SimpleTCPHandler) server.start()
Je m'y prend mal ? Quelqu'un aurait un conseil ?
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 import socket class AdminClient: def __init__(self, ip, port): self.ip = ip self.port = port def connect(self): self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.connect((self.ip, self.port)) print("wait message") print(self.sock.recv(100)) print("after message") self.sock.send("exit") def disconnect(self): self.sock.shutdown(socket.SHUT_RDWR) self.sock.close() if __name__ == "__main__": client = AdminClient("localhost", 2001) client.connect() client.disconnect()
Et si je ne suis pas très clair, n'hésitez pas à me demander des précisions.![]()
Partager