IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Insertion de mini cryptage pour un chat utilisant les Threads


Sujet :

Python

  1. #21
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 17
    Par défaut
    Effectivement, je n'avait pas vu que je n'avait pas mis le code serveur, le voici :
    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
    #!/usr/bin/env python
    #-*-coding:Utf-8-*-
    # Python est optionnellement multi-threadé, si on lui donne les bonnes
    # "commandes", donc j'ai utilisé ici les bonnes "commandes" en utilisant
    # une classe pour chaque thread, un pour la réception l'autre l'émission
    # Utilise les threads pour gérer les connexions clientes en parallèle.
     
    ip = raw_input("Entrez le numéro de votre pc serveur : ")
    HOST = "127.0.0.%s" % (ip)
    PORT = 40000
    import socket, sys, threading
    class ThreadClient(threading.Thread):
    	'''dérivation d'un objet thread pour gérer la connexion avec un client'''
    	def __init__(self, conn):
    		threading.Thread.__init__(self)
    		self.connexion = conn
    	def run(self):
    # Dialogue avec le client :
    # La personne gérant le serveur attribue un pseudo aux nouveaux 
    # connectés.
    		nom = nom = self.getName() # Chaque thread possède un nom 
    		while 1:
    			msgClient = self.connexion.recv(1024)
    			if msgClient.upper() == "FIN" or msgClient =="":
    				break
    			message = "%s dit %s" % (nom, msgClient)
    			print message
    			# Faire suivre le message à tous les autres clients :
    			for cle in conn_client:
    				if cle != nom:      # ne pas le renvoyer à l'émetteur
    					conn_client[cle].send(message)
    		# Fermeture de la connexion :
    		self.connexion.close()       # couper la connexion côté serveur
    		del conn_client[nom]         # supprimer son entrée dans le dictionnaire
    		print "Client %s déconnecté." % nom
    		# Le thread se termine ici
    # **********************************************************************
    # Initialisation du serveur - le socket AF_INET s'occupe de la liaison
    # au port et le sock_stream de l'échange de donnée, ce sont des éléments
    # intégrés au module socket :
    # **********************************************************************
    mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
    	mySocket.bind((HOST, PORT))
    except socket.error:
    	print "Pas de liaison de socket pour l'adresse choisie."
    	sys.exit()
    print "Le serveur est prêt, en attente de clients"
    mySocket.listen(5)
    # Attente et prise en charge des connexions demandées par les clients :
    conn_client = {}                  # dictionnaire des connexions clients
    while 1:
    	connexion, adresse = mySocket.accept()
    # Créer un nouvel objet thread pour gérer la connexion :
    	th = ThreadClient(connexion)
    	th.start()
    # Mémorisation de la connexion dans le dictionnaire :
    # Identifiant sauvé dans le dictionnaire
    	it = th.getName()        
     
     
    	conn_client[it] = connexion
    	print "Client %s connecté, adresse IP %s, port %s." %\
    		(it, adresse[0], adresse[1])
    	# Dialogue avec le client :
    	connexion.send("Vous êtes connecté. Envoyez vos messages.")


    J'ai fait comme tu m'avait dis et cela donne sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Entrez le numéro du pc serveur : 1
    Connexion établie avec le serveur BlackWater.
    > DEBUG Reception msg coded: " Vous êtes connecté. Envoyez vos messages. "
    DEBUG Reception msg clear: " <U[Y��ZKYIUTTKIZ�+T\U_K`\UYSKYYGMKY "
    '<U[Y��ZKYIUTTKIZ�+T\U_K`\UYSKYYGMKY'
    Voilà merci!

  2. #22
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    C'est ce que je disais, dans le script serveur tu as oublié que tu recevais de la part de tes client des messages cryptés, et tu te retrouvais à envoyer des messages, soit complètement non-cryptés (premier message envoyé lors d'une nouvelle connexion), soit partiellement cryptés (messages reçus d'un client puis relayé aux autres)...
    En utilisant le script de ce message et de mon dernier, ça devrait fonctionner comme il se doit.
    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
    #!/usr/bin/env python
    #-*-coding:Utf-8-*-
    # Python est optionnellement multi-threadé, si on lui donne les bonnes
    # "commandes", donc j'ai utilisé ici les bonnes "commandes" en utilisant
    # une classe pour chaque thread, un pour la réception l'autre l'émission
    # Utilise les threads pour gérer les connexions clientes en parallèle.
    import socket, sys, threading
     
    def crypt(message_emis):
        return ''.join(chr(ord(c)+26) for c in message_emis)
     
    def decrypt(message_recu):
        return  ''.join( chr(ord(c)-26) for c in message_recu )
     
    ip = raw_input("Entrez le numéro de votre pc serveur : ")
    HOST = "127.0.0.%s" % (ip)
    PORT = 40000
     
    class ThreadClient(threading.Thread):
    	"""dérivation d'un objet thread pour gérer la connexion avec un client"""
    	def __init__(self, conn):
    		threading.Thread.__init__(self)
    		self.connexion = conn
    	def run(self):
    # Dialogue avec le client :
    # La personne gérant le serveur attribue un pseudo aux nouveaux 
    # connectés.
    		nom = nom = self.getName() # Chaque thread possède un nom 
    		while 1:
    			coded_message = self.connexion.recv(1024)
    			clear_message = decrypt(coded_message)
    			if clear_message.upper() == "FIN" or msgClient =="":
    				break
    			coded_message = crypt("{nom:<12}>> {msg}".format(nom=nom, msg=clear_message))
    			# Faire suivre le message à tous les autres clients :
    			for cle in conn_client:
    				if cle != nom:
    					conn_client[cle].send(coded_message)
    		# Fermeture de la connexion :
    		self.connexion.close()
    		del conn_client[nom]
    		print "Client %s déconnecté." % nom
    		# Le thread se termine ici
    # **********************************************************************
    # Initialisation du serveur - le socket AF_INET s'occupe de la liaison
    # au port et le sock_stream de l'échange de donnée, ce sont des éléments
    # intégrés au module socket :
    # **********************************************************************
    mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
    	mySocket.bind((HOST, PORT))
    except socket.error:
    	print "Pas de liaison de socket pour l'adresse choisie."
    	sys.exit()
    print "Le serveur est prêt, en attente de clients"
    mySocket.listen(5)
    # Attente et prise en charge des connexions demandées par les clients :
    conn_client = {}                  # dictionnaire des connexions clients
    while 1:
    	connexion, adresse = mySocket.accept()
    # Créer un nouvel objet thread pour gérer la connexion :
    	th = ThreadClient(connexion)
    	th.start()
    # Mémorisation de la connexion dans le dictionnaire :
    # Identifiant sauvé dans le dictionnaire
    	it = th.getName()        
     
    	conn_client[it] = connexion
    	print "Client %s connecté, adresse IP %s, port %s." %\
    		(it, adresse[0], adresse[1])
    	# Dialogue avec le client :
    	connexion.send(crypt("Vous êtes connecté. Envoyez vos messages."))

  3. #23
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 17
    Par défaut
    J'ai essaye et le client ne recoit pas les messages des autres et le serveur quand a lui affiche sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Exception in thread Thread-2:
    Traceback (most recent call last):
      File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner
        self.run()
      File "/home/clawhammer/Téléchargements/serveur_dev.py", line 31, in run
        clear_message = decrypt(coded_message)
      File "/home/clawhammer/Téléchargements/serveur_dev.py", line 13, in decrypt
        return  ''.join( chr(ord(message_recu)-26) )
    TypeError: ord() expected a character, but string of length 4 found

  4. #24
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    oui, une petite faute de ma part, c'est corrigé, tu peux retenter. Et si les client n'affichaient rien, c'étaient précisément à cause de l'erreur sur le serveur

  5. #25
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 17
    Par défaut
    J'ai lancé, sa n'allait pas car MsgClient n'était pas définis, (oubli?) donc j'ai mis message_clear

    mais maintenant le serveur n'affiche plus les messages des gens ...

  6. #26
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    oui oui, oubli

    Et en effet le serveur n'affiche pas les messages des clients. Même si je n'en vois pas l'intérêt, c'est encore un oubli de ma part. Néanmoins, tu dois probablement déjà remédier à cela, non ?

    Et hormis cela, ça fonctionne ?

  7. #27
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 17
    Par défaut
    En faite ce n'est pas trop le résultat qu'attends mon prof =s, comme dit précédemment il aimerait :
    Le client écrit un message
    Le client crypte le message
    Le client envois le message
    Le serveur reçoit
    Le serveur affiche
    Le serveur décrypte la donnée
    le serveur renvois la donnée décryptée
    le client affiche

    Donc la chaine cryptée n'est affichée que dans le serveur, les clients eux voient la chaine décryptée, le code se rapprochant le plus de ce résultat est le suivant :
    Serveur (serveur encore inchangé celui la) :
    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
    #!/usr/bin/env python
    #-*-coding:Utf-8-*-
    # Python est optionnellement multi-threadé, si on lui donne les bonnes
    # "commandes", donc j'ai utilisé ici les bonnes "commandes" en utilisant
    # une classe pour chaque thread, un pour la réception l'autre l'émission
    # Utilise les threads pour gérer les connexions clientes en parallèle.
     
    ip = raw_input("Entrez le numéro de votre pc serveur : ")
    HOST = "127.0.0.%s" % (ip)
    PORT = 40000
    import socket, sys, threading
    class ThreadClient(threading.Thread):
    	'''dérivation d'un objet thread pour gérer la connexion avec un client'''
    	def __init__(self, conn):
    		threading.Thread.__init__(self)
    		self.connexion = conn
    	def run(self):
    # Dialogue avec le client :
    # La personne gérant le serveur attribue un pseudo aux nouveaux 
    # connectés.
    		nom = nom = self.getName() # Chaque thread possède un nom 
    		while 1:
    			msgClient = self.connexion.recv(1024)
    			if msgClient.upper() == "FIN" or msgClient =="":
    				break
    			message = "%s dit %s" % (nom, msgClient)
    			print message
    			# Faire suivre le message à tous les autres clients :
    			for cle in conn_client:
    				if cle != nom:      # ne pas le renvoyer à l'émetteur
    					conn_client[cle].send(message)
    		# Fermeture de la connexion :
    		self.connexion.close()       # couper la connexion côté serveur
    		del conn_client[nom]         # supprimer son entrée dans le dictionnaire
    		print "Client %s déconnecté." % nom
    		# Le thread se termine ici
    # **********************************************************************
    # Initialisation du serveur - le socket AF_INET s'occupe de la liaison
    # au port et le sock_stream de l'échange de donnée, ce sont des éléments
    # intégrés au module socket :
    # **********************************************************************
    mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
    	mySocket.bind((HOST, PORT))
    except socket.error:
    	print "Pas de liaison de socket pour l'adresse choisie."
    	sys.exit()
    print "Le serveur est prêt, en attente de clients"
    mySocket.listen(5)
    # Attente et prise en charge des connexions demandées par les clients :
    conn_client = {}                  # dictionnaire des connexions clients
    while 1:
    	connexion, adresse = mySocket.accept()
    # Créer un nouvel objet thread pour gérer la connexion :
    	th = ThreadClient(connexion)
    	th.start()
    # Mémorisation de la connexion dans le dictionnaire :
    # Identifiant sauvé dans le dictionnaire
    	it = th.getName()        
     
     
    	conn_client[it] = connexion
    	print "Client %s connecté, adresse IP %s, port %s." %\
    		(it, adresse[0], adresse[1])
    	# Dialogue avec le client :
    	connexion.send("Vous êtes connecté. Envoyez vos messages.")



    Et le 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
    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
    #!/usr/bin/env python
    #-*-coding:Utf-8-*-
    # ***********************************************************************
    # Définition d'un client réseau gérant en parallèle l'émission
    # et la réception des messages.
    # Ce sont les threads qui s'occupent de se travail là, un thread pour
    # la réception, et un pour l'émission des messages.
    # **********************************************************************
    ip = raw_input("Entrez le numéro du pc serveur : ")
    HOST = "127.0.0.%s" % (ip)
    PORT = 40000
    # **********************************************************************
    # Nous avons besoin des sockets car ils vont servir comme une sorte de
    # logiciel lié au port de communication (dans ce cas 40 000)
    # L'achange de donnée se fait aussi par une fonction des sockets le
    # stream socket, moins évolué que les packets mais plus simple et
    # demandant moins de ressources, c'est grâce au livre de M. Swinnen que 
    # j'ai pu utiliser ces technologies.
    # **********************************************************************
    import socket, sys, threading
    # Création de la fonction pour crypter le message message_emis sera donné dans le thread émission plus loin.
    def crypt(message_emis):
    	cpt_crypt=0
    	dec = 26
    	crypt = ""
    	while cpt_crypt < len(message_emis):
    		crypt += chr(ord(message_emis[cpt_crypt]) + dec)
    		cpt_crypt += 1
    	return crypt
     
    def decrypt(message_recu):
    	cpt_decrypt = 0
    	decrypt = ""
    	dec = 26
    	while cpt_decrypt < len(message_recu):
    		decrypt += chr(ord(message_recu[cpt_decrypt]) - dec)
    		cpt_decrypt +=1
    	return decrypt
     
     
    # Classe permettant la gestion du thread s'occupant de l'émission du message.
    class ThreadEmission(threading.Thread):
    	"""objet thread gérant l'émission des messages"""
    	def __init__(self, conn):
    		threading.Thread.__init__(self)
    		self.connexion = conn           
    		# réf. du socket de connexion
    	def run(self):
    		while 1:
    			message_emis = raw_input()
    			self.connexion.send(crypt(message_emis))
     
    # Classe permettant la gestion du thread s'occupant de la réception du message.
    class ThreadReception(threading.Thread):
    	"""objet thread gérant la réception des messages"""
    	def __init__(self, conn):
    		threading.Thread.__init__(self)
    		self.connexion = conn            # réf. du socket de connexion
    	def run(self):
    		while 1:
    			message_recu = decrypt(self.connexion.recv(1024))
    			print "'" + message_recu + "'"
    			if message_recu =='' or message_recu.upper() == "FIN":
    				break
    # **********************************************************************
    # Fermeture par un break (le mal) du thread (classe) réception
    # On force la fermeture du thread émission (th_E) :
    # on ferme 
    # **********************************************************************
    		th_E._Thread__stop()
    		print "Client arrêté. Connexion interrompue."
    		self.connexion.close()
     
    # Établissement de la connexion :
    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 BlackWater."
    # Dialogue avec le serveur : on lance deux threads pour gérer
    # indépendamment l'émission et la réception des messages :
    th_E = ThreadEmission(connexion)
    th_R = ThreadReception(connexion)
    th_E.start()
    th_R.start()


    Car avec ces deux programmes j'en arrive à cela sur le serveur :
    J'ai donc envoyé "Salut les gens de developpez.net!"
    Sur le serveur sa affiche :


    Après j'ai lancé un deuxième client pour tester, et j'ai envoyé "Deuxième test!", et cela donne sa aux autres clients :


    Il faudrait juste enlever le cryptage du thread qui envoit la chaine aux clients et ce serait bon!
    J'ai bossé dessus une partie de la nuit, je suis crevé et dois aller a l'école.. merci de votre aide!

  8. #28
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    J'ai bien redemandé à mon prof, il veut que ce soit le serveur qui crypt et puis le client qui décrypt, donc en faite mon tfe est presque finis, question serveur c'est ok, mais le client lui crypt 'Thread 2 dit' assez embetant
    En faite ce n'est pas trop le résultat qu'attends mon prof =s, comme dit précédemment il aimerait :
    Le client écrit un message
    Le client crypte le message
    Le client envois le message
    Le serveur reçoit
    Le serveur affiche
    Le serveur décrypte la donnée
    le serveur renvois la donnée décryptée

    le client affiche
    ???

    Hmmm... mets-toi d'accord avec toi-même, puis dessines un plans des transmissions serveur <->client, observe les différences entre tes codes, et ceux qui t'ont été fourni (avec les résultats qui en découlent). Repères bien à chaque fois les endroits où il y a envoi, et où l'information envoyée depuis cet endroit est réceptionée, et demandes-toi si cela doit être crypté : (oui | non | ça dépend des fois) ; il faut éviter au maximum la dernière réponse, et dans ton prog c'est plus que faisable.

  9. #29
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 17
    Par défaut
    Toute mes excuses, j'avais repris ce que j'avais mis au par avant, donc je veux faire sa :
    Le client écrit un message
    Le client crypte le message
    Le client envois le message
    Le serveur reçoit
    Le serveur affiche la donnée reçue (cryptée).
    le client décrypte
    le client affiche la donnée.

  10. #30
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    Pas de problème, mais bon, j'ai déjà trop maché le travail... (désolé hein...)
    Or c'est toi qui va être noté, il faut donc que cette note reflète la valeur de ton travail.

    Analyses, comprend, retiens, et réécris afin d'obtenir ce que tu désires. Tu as dans ce thread toutes les informations nécessaires pour atteindre ton but.

  11. #31
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 17
    Par défaut
    Et j'ai finis le mode console! Mais je n'y serai jamais arrivé sans toi, maintenant un petit mode graphique en Tkinter (on a pas appris mieux donc..) et finis, je t'ai envoyé un PM N.tox pour te demander quelque chose (pas de l'aide ne t'en fait pas :p)

Discussions similaires

  1. Obligé d'utiliser les threads pour faire un timer ?
    Par theclem35 dans le forum Débuter
    Réponses: 5
    Dernier message: 31/03/2011, 21h25
  2. Réponses: 6
    Dernier message: 20/08/2010, 11h13
  3. Utiliser les threads pour les traitements long
    Par rach375 dans le forum Websphere
    Réponses: 3
    Dernier message: 14/11/2006, 13h08
  4. [VB]chat utilisant les mailslots
    Par Shypster dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 28/01/2006, 00h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo