A voir également:
- Reseau en python
- Citizen code python avis - Accueil - Outils
- Cable reseau player freebox - Forum Freebox
- Entrer les informations d'identification reseau - Guide
- Le message n'a pas été envoyé car le service n'est pas activé sur le réseau - Forum Xiaomi
- Partage reseau - Guide
10 réponses
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 662
24 mars 2004 à 17:59
24 mars 2004 à 17:59
Voilà un exemple:
Le client a un objet de type liste, et il l'envoie au serveur qui est en écoute sur le port 9999:
Le serveur (server.py):
Et le client (client.py):
Lance d'abord le serveur, puis le client.
Le serveur affichera la liste envoyée par le client.
Quelques remarques:
- la gestion de la boucle réseau est ici assez mauvaise (pas de gestion d'erreur, gère une seule connexion, etc.)
- il faut faire un try/except sur pickle.loads()
- pickle.loads() peut poser des problèmes de sécurité.
- Pas la peine de réinventer la roue: Il existe de librairies qui simplifie grandement le passage d'objets en réseau, comme http://pyro.sourceforge.net/
:-)
Le client a un objet de type liste, et il l'envoie au serveur qui est en écoute sur le port 9999:
Le serveur (server.py):
# -*- coding: iso-8859-1 -*- # Le serveur qui reçoit l'objet sur le port 9999 import socket, pickle # Le serveur se met en écoute sur le port 9999 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('', 9999)) s.listen(1) conn, addr = s.accept() # ici, accept() est bloquant data = '' # Et le serveur reçoit les données (éventuellement par petits bouts) while 1: paquet = conn.recv(1024) if not paquet: break data += paquet conn.close() # Le serveur dé-sérialise l'objet et l'affiche nouvelleliste = pickle.loads(data) print nouvelleliste
Et le client (client.py):
# -*- coding: iso-8859-1 -*- # Le client qui envoie sur le port 9999 import socket,pickle maliste = ['toto','titi',23,'Hello, world !'] # La liste à envoyer # Je convertis maliste en suite d'octets data = pickle.dumps(maliste) # Je l'envoie au serveur s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('localhost', 9999)) s.send(data) s.close()
Lance d'abord le serveur, puis le client.
Le serveur affichera la liste envoyée par le client.
Quelques remarques:
- la gestion de la boucle réseau est ici assez mauvaise (pas de gestion d'erreur, gère une seule connexion, etc.)
- il faut faire un try/except sur pickle.loads()
- pickle.loads() peut poser des problèmes de sécurité.
- Pas la peine de réinventer la roue: Il existe de librairies qui simplifie grandement le passage d'objets en réseau, comme http://pyro.sourceforge.net/
:-)
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 662
24 mars 2004 à 16:47
24 mars 2004 à 16:47
Bah oui pas de problème.
Quand tu ouvre un socket, tu peux balancer absolument tout ce que tu veux dedans !
Je te donne même un truc: en utilisant pickle() ça te permet de transférer des objets Python par le réseau (que ça soit une string, un tableau, une liste, un fichier, ou n'importe quel objet plus complexe)
Quand tu ouvre un socket, tu peux balancer absolument tout ce que tu veux dedans !
Je te donne même un truc: en utilisant pickle() ça te permet de transférer des objets Python par le réseau (que ça soit une string, un tableau, une liste, un fichier, ou n'importe quel objet plus complexe)
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 662
24 mars 2004 à 17:43
24 mars 2004 à 17:43
pickle() permet de transformer (pratiquement) n'importe quel objet Pyhton en suite d'octets.
Cette suite d'octets peut être enregistrée dans un fichier, ou envoyée par réseau, ou même stockée dans une base de données.
En dé-picklant cette suite d'octets, on récupère l'objet qu'on peut continuer à utiliser.
C'est un moyen comme un autre d'envoyer quelquechose par réseau.
Si j'ai le temps je te ferai un petit d'exemple pour envoyer quelquechose par réseau.
Cette suite d'octets peut être enregistrée dans un fichier, ou envoyée par réseau, ou même stockée dans une base de données.
En dé-picklant cette suite d'octets, on récupère l'objet qu'on peut continuer à utiliser.
C'est un moyen comme un autre d'envoyer quelquechose par réseau.
Si j'ai le temps je te ferai un petit d'exemple pour envoyer quelquechose par réseau.
teebo
Messages postés
33491
Date d'inscription
jeudi 14 octobre 2004
Statut
Modérateur
Dernière intervention
24 février 2011
1 793
24 mars 2004 à 16:17
24 mars 2004 à 16:17
??
. . Bon!Si on m'empeche de travailler
\_/ Je ne me debattrai pas!
. . Bon!Si on m'empeche de travailler
\_/ Je ne me debattrai pas!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci seb ca marche bien
mais maintenant un autre probleme se pose a moi
comment puis je connecter plusieurs client a un serveur et lorsque que je vais recevoir un message comment savoir par qui il a ete envoyer merci
mais maintenant un autre probleme se pose a moi
comment puis je connecter plusieurs client a un serveur et lorsque que je vais recevoir un message comment savoir par qui il a ete envoyer merci
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 662
25 mars 2004 à 16:30
25 mars 2004 à 16:30
Pour savoir quel client se connecte, c'est l'objet socket qui te le dira.
Un socket est un couple (adresseIPLocal:portLocal, adresseIPdistante:portDistant).
Un socket identifie de façon unique une communication entre 2 logiciels.
En lisant les propriété du socket, tu pourra savoir de quel client il s'agit.
(variable addr de notre serveur ci-dessus).
Par exemple, ajoute un print addr juste après l'instruction accept() dans le serveur. Tu verra l'adresse et le port du client.
Note que si tu veux traiter beaucoup de clients à la fois, il faudra peut-être penser aux performances: Notre serveur ici est mono-client (il ne traite qu'un client à la fois avant de passer au suivant).
Il faudra sans doute faire du multi-thread ou bien des sockets asynchrones.
Si il peut y avoir différents utilisateurs, il faudra peut-être prévoir un système d'authentification (avec login/password).
Un socket est un couple (adresseIPLocal:portLocal, adresseIPdistante:portDistant).
Un socket identifie de façon unique une communication entre 2 logiciels.
En lisant les propriété du socket, tu pourra savoir de quel client il s'agit.
(variable addr de notre serveur ci-dessus).
Par exemple, ajoute un print addr juste après l'instruction accept() dans le serveur. Tu verra l'adresse et le port du client.
Note que si tu veux traiter beaucoup de clients à la fois, il faudra peut-être penser aux performances: Notre serveur ici est mono-client (il ne traite qu'un client à la fois avant de passer au suivant).
Il faudra sans doute faire du multi-thread ou bien des sockets asynchrones.
Si il peut y avoir différents utilisateurs, il faudra peut-être prévoir un système d'authentification (avec login/password).
Je suis en train de faire un crawler en python pour l'instant il fonctionne avec un client et un serveur mais je souhaiterais le faire fonctionner sur plusieur client histoire d'ammeliorer le rendement mon but est lorsque qu'un client trouve un lien il regarde s'il est du meme domaine que celui qu'il fait et alors il le parcourrera apres sinon il l'envoi au serveur qui le redirige vers un client libre ceci permettra donc d'accelerer la chose donc voila pourquoi j'ai besoin de savoir commment ca fonctionne avec plusieur client merci
dje-dje
Messages postés
10417
Date d'inscription
mardi 6 janvier 2004
Statut
Modérateur
Dernière intervention
28 janvier 2011
758
25 mars 2004 à 17:34
25 mars 2004 à 17:34
Désolé de l'incruste!
Justeun post pour retrouver le message dans mes contributions car la discussions m'interresse.
a+
dje-dje
Il y a 10 types de personne dans le monde,
ceux qui comprennent le binaire et les autres ...
Justeun post pour retrouver le message dans mes contributions car la discussions m'interresse.
a+
dje-dje
Il y a 10 types de personne dans le monde,
ceux qui comprennent le binaire et les autres ...
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 662
25 mars 2004 à 18:03
25 mars 2004 à 18:03
cyril> dans ce cas, je te recommande de jeter un coup d'oeil du côté de pyro:
cela permettra aux clients d'appeler des méthodes directement sur le serveur, de passer des objets complets entre eux, et de communiquer facilement.
pyro s'occupera de toute la partie bas niveau (qui est généralement pénible à coder): gestion réseau, connexion, transfer, reprise en cas d'erreur, sérialisation des objets, etc.
cela permettra aux clients d'appeler des méthodes directement sur le serveur, de passer des objets complets entre eux, et de communiquer facilement.
pyro s'occupera de toute la partie bas niveau (qui est généralement pénible à coder): gestion réseau, connexion, transfer, reprise en cas d'erreur, sérialisation des objets, etc.