Bonjour, je commence tout juste a apprendre le langage python (je viens de C#) et donc un problème ce pose : les sockets.
Donc j'ai fait mes classes tout fonctionne sauf que je ne peux pas envoyer et recevoir en même temps.
Voila un petit schéma de ce que je voudrais arriver a faire :
SocketBase est une classe abstraite (on dit comme sa en C#).
J'ai 3 événements au quelle je m'abonne dans ma classe "enfant" :
- on_connected
- on_disconnected
- on_data_arrival
Je voudrais pouvoir envoyer des messages a l'aide d'une méthode send() tout en recevant les données qui arrivent, je sais pas si c'est très clair.
Voila ma classe SocketBase a l'heure actuel :
Et ma classe enfant SocketClient :
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87 import socket import threading from EventHook import * class SocketBase(object): # Properties # def get_statut(self): return self._statut Statut = property(fget=get_statut) def get_ip(self): return self._ip Ip = property(fget=get_ip) def get_port(self): return self._port Port = property(fget=get_port) def get_socket(self): return self._socket Socket = property(fget=get_socket) socket_connected = EventHook() socket_disconnected = EventHook() socket_data_arrival = EventHook() # End Properties # # Constructor # def __init__(self, ip, port): self._ip = ip self._port = port self._statut = 0 self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # End Constructor # Function # def connect_socket(self, ip = "", port = 0): if (ip is not "") and (port is not 0): self._ip = ip self._port = port print "Ip: %s, Port: %s" % (self._ip, self._port) try: self._socket.connect((self._ip, self._port)) self._statut = 1 self.socket_connected.fire() return self._statut except socket.error, exception: #print "Error : %s" % exception errorCode = exception[0] if int(errorCode) == 10054: print "Connection on the server has been lost" self._socket.close() self._statut = 0 return self._statut def close_socket(self): if self._statut == 1: self._socket.close() self._statut = 0 def loop(self): while self._statut != 0: data = self._socket.recv(1024) if not data: self.close_socket() self.socket_disconnected.fire() else: self.socket_data_arrival.fire(data) def send(self, msg): self._socket.send(msg) # End Function #
Je vous remercie pour d'avance pour l'aide que vous pourrez m'apporté.
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 from SocketBase import * class SocketClient(SocketBase): def __init__(self, ip, port): super(SocketClient, self).__init__(ip, port) self.socket_connected += self.on_connected self.socket_disconnected += self.on_disconnected self.socket_data_arrival += self.on_data_arrival def Connect(self): print "Try to connect..." self.connect_socket() def Disconnect(self): self.close_socket() def on_connected(self, *arg, **kwargs): print "Connected on the server" self.send("HC") self.loop() def on_disconnected(self, *arg, **kwargs): print "Disconnected on the server" def on_data_arrival(self, data): print data
Ps: j'oubliais, je suis obliger d'utiliser python 2.2, je dépend d'un logiciel dont je n'ai pas les sources.
Cordialement, Quentin.
Partager