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

Réseau/Web Python Discussion :

Passer a un socket autre chose qu'une chaine de caractere


Sujet :

Réseau/Web Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 22
    Par défaut Passer a un socket autre chose qu'une chaine de caractere
    Bonjour

    toute ma question est dans le sujet :

    je m'explique acutellement je me sert de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    host = "localhost"
    port = 27692
     
    addr = (host,port)
     
    self.UDPSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     
    UDPSock.sendto(data,addr)
    donc si data est un string ca marche nikel
    mais si data est est int ca ne marche pas
    si data est un dico non plus
    mais si data est une list ca marche

    seulement qu'est ce que la chaine "abc"
    c'est bien une list [0:"a" , 1:"b" , 2:"c"]

    donc j'ai suposé que je pouvais passer au socket une liste de la forme: [0:1 , 1:2 ]

    hors le socket retroune une erreure disant que le parametre passé data est vide
    donc il considere ma list vide.

    ais je fais une erreure ?

    car je suis obliger de passer mon data dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data = pickle.dumps(data)
    qui à pour but de convertir ma list en chaine d'octet donc en une gigantesque chaine de caratere et donc comme par moment j'ai besoin d'envoyer enormément d'info j'explose mon buffer à 4096

    existe t'il donc une methode pour passer autre chose qu'une chaine de caratere

    je pressise que je n'ai trouver aucune info (peut etre que j'ai mal chercher) et que tous les tutos que j'ai lu sur les socket n'envoi que des chaine de caracter.

    Pouvez vous me donner des infos ou me donner une piste ?

  2. #2
    Membre éclairé Avatar de ctiti60
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Par défaut
    Salut,

    A ma connaissance, tu ne peux pas envoyer autre chose qu'une string. Maintenant, dans la string tu mets ce que tu veux. Si c'est un int, tu l'envoies sous forme d'une chaine et puis de l'autre côté du converti. Idem pour un dico. Il faut juste savoir derrière à quoi s'attendre et encore, tu peux toujours envoyer un code avant pour dire quel type tu envoies.

    Pour veux-tu passer directement le bon type ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 22
    Par défaut
    pour une chose simple:

    passer 1000000 directement en int me coutera moin cher en octet que d'envoyer "1000000"

    tout bonnement pour economiser ma bp car je develope un jeux en reseau avec toutes les infos que je doit passer a 30 personne j'explose mon buffer a 4096

    il faud donc que je change ma methode de reseau

    merci de la reponce

  4. #4
    Membre éclairé Avatar de ctiti60
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Par défaut
    Et si tu compresses les infos ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 22
    Par défaut
    alors la c'est une chose que je ne sais pas faire

    si tu pouvais me donner des indication ca pourais m'aider

    merci d'avance

  6. #6
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    salut, tu peux utiliser le module zlib par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import zlib
    import random
     
    # production d'une chaine aleatoire
    msg_original = "_".join([str(random.randrange(10000)) for i in range(10000)])
    print "longueur du message originial: %i" % len(msg_original)
    msg_zip = zlib.compress(msg_original, 9)
    print "longueur du message a envoyer: %i" % len(msg_zip)
    msg_recu = zlib.decompress(msg_zip)
    print "le message recu est-il le meme que l'original:",
    print msg_recu==msg_original
    Je ne sais pas si tu pourras l'envoyer tel que dans ta socket, tu vas peut être devoir utiliser base64 pour obtenir une chaîne imprimable, à tester

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 22
    Par défaut
    bon je vais voir mais peut etre que je vais changer de et utiliser ice qui va certainement me simplifier la vie SI j'arrive à le comprendre et à le dompter

    mais a le rencoder en chaine de chaine de caracter je ne risque pas de perdre les avantages de la compretion ?

  8. #8
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    msg_zip64 = base64.encodestring(msg_zip)
    print "taille msg_zip64: %i" % len(msg_zip64)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    longueur du message originial: 48893
    longueur du message a envoyer: 22749
    le message recu est-il le meme que l'original: True
    taille msg_zip64: 30732
    Ca permet de gagner quelques octets.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 22
    Par défaut
    ok ba je vais essayer avec ca merci des infos et je reste ouvert a toute autre personne qui aurais d'autres solutions

Discussions similaires

  1. autre chose qu'une page html dans un frame
    Par patricktoulon dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 27/06/2013, 18h16
  2. Réponses: 2
    Dernier message: 20/04/2010, 12h56
  3. [Tableaux] passer une chaine de caracteres dans une URL ?
    Par isa150183 dans le forum Langage
    Réponses: 3
    Dernier message: 16/09/2008, 15h06
  4. Couper une chaine de caracteres en 2 autres variables
    Par PlazaDel62 dans le forum Langage
    Réponses: 5
    Dernier message: 07/05/2008, 10h16
  5. Réponses: 2
    Dernier message: 12/03/2008, 13h44

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