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 :

communication cgi-script python


Sujet :

Réseau/Web Python

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 50
    Points
    50
    Par défaut communication cgi-script python
    salut,

    je possède 2 instances d'un cgi.le premier avec une socket sur le port 40000.
    le deuxieme avec le port 40001.
    le cgi communique avec une autr module python qui a une socket en ecoute sur le port 40000.du cout la communication avec le 1er cgi est etablie mais pas avec le second.

    j'aimerai bien faire un truc pour le faire marché pour les 2 cgi au meme temps.
    quelqu'un a une idée?
    code pour le module python:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def __init__(self):
     
            # ici on cree la socket et le thread
            self._TCPSock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
            #''' Listen on port 21567'''
            #'''to all IP addresses on this system'''
     
            self._server_port = 40000
            self._listen_addr = ("", self._server_port)
            try:
                self._TCPSock.bind(self._listen_addr)
            except socket.error, err:
                print "Couldn't be a tcp server on port %d : %s" % (self._server_port, err)
                raise SystemExit

  2. #2
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    C’est un peu court comme code, et je ne suis pas spécialiste des sockets, mais au feeling, je dirais*: ajouter un deuxième socket à self (self._TCPSock2, par exemple), avec tout ce qui va avec, y “binder” le deuxième port, et modifier le reste du code (de la classe*?) pour travailler avec ces deux sockets (voire plus, si nécessaire)…

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par mont29 Voir le message
    C’est un peu court comme code, et je ne suis pas spécialiste des sockets, mais au feeling, je dirais*: ajouter un deuxième socket à self (self._TCPSock2, par exemple), avec tout ce qui va avec, y “binder” le deuxième port, et modifier le reste du code (de la classe*?) pour travailler avec ces deux sockets (voire plus, si nécessaire)…
    non c'est pas ça.j'aimerai faire un truc du genre:
    essayer de se connecter au port 40000.
    si il est déjà utilisé alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    self._listen_addr = ("", self._server_port+1)
    self._TCPSock.bind(self._listen_addr)

    comment faire un truc pareil?

  4. #4
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Ben, un truc comme ça (générique, peut scanner autant de ports que voulu), ça ne marche pas*?

    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
    def __init__(self):
        # ici on cree la socket et le thread
        self._TCPSock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        #''' Listen on port 21567'''
        #'''to all IP addresses on this system'''
     
        prots = (40000, 40001, None)  # Last None used a sentinel to mark all tries failed...
        for prt in ports:
            self._server_port = prt
            self._listen_addr = ("", self._server_port)
            if prt is None:
                print "Couldn't bind to a tcp server on any of those ports: %s" % str(ports[:-1])
                raise SystemExit
            try:
                self._TCPSock.bind(self._listen_addr)
                break  # Binding worked, stop testing ports!
            except socket.error, err:
                print "Couldn't find a tcp server on port %d : %s" % (self._server_port, err)

  5. #5
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par mont29 Voir le message
    Ben, un truc comme ça (générique, peut scanner autant de ports que voulu), ça ne marche pas*?

    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
    def __init__(self):
        # ici on cree la socket et le thread
        self._TCPSock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        #''' Listen on port 21567'''
        #'''to all IP addresses on this system'''
     
        prots = (40000, 40001, None)  # Last None used a sentinel to mark all tries failed...
        for prt in ports:
            self._server_port = prt
            self._listen_addr = ("", self._server_port)
            if prt is None:
                print "Couldn't bind to a tcp server on any of those ports: %s" % str(ports[:-1])
                raise SystemExit
            try:
                self._TCPSock.bind(self._listen_addr)
                break  # Binding worked, stop testing ports!
            except socket.error, err:
                print "Couldn't find a tcp server on port %d : %s" % (self._server_port, err)
    merci mon ami pour votre réponse.le problème c'est que si je fais comme vous l'avais dites( c'est à dire je fais ça dans init),les 2 instances de mon cgi entre tous les deux dans le port 40000 et puis ils ferment cette connexions et entre dans le port 40001(ils entrent 1 par 1)moi je veux que le 1er entre avec le port 40000 et le 2eme essai d'entrer dans 40000 et lorsqu'il le trouve occupé il passe à 40001,s'il é occupé il passera à 40002(jusqu'à ce qu'il trouve un port disponible)
    en fait mes deux cgi normalement resteront connectés pour un bon bout de temps.du cout ils vont fonctionner en parallèle.
    donc le 1er avec le port 40000 et le 2eme dans le port 40001.
    je pense que si on fait comme ça(on déclare ça dans init,les 2cgi passeront respectivement par les 2 ports).

  6. #6
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Je ne vois pas pourquoi ça bloque (hors la coquille dans le bout de code que j’ai donné, mais j’imagine que ce n’est pas le problème…). Normalement, le break dans le try assure que dès qu’un bind() réussit, on passe à autre chose…

    Encore une fois, sans plus de code, difficile d’aider plus. On peut essayer cette version, sinon (mais c’est le même principe)*:

    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
    def __init__(self):
        # ici on cree la socket et le thread
        self._TCPSock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        #''' Listen on port 21567'''
        #'''to all IP addresses on this system'''
     
        prt = 40000
        done = False 
        while not done:
            self._server_port = prt
            self._listen_addr = ("", self._server_port)
            try:
                self._TCPSock.bind(self._listen_addr)
                done = True  # Binding worked, stop testing ports!
            except socket.error, err:
                prt += 1
                print "Couldn't find a tcp server on port %d : %s" % (self._server_port, err)

  7. #7
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par mont29 Voir le message
    Je ne vois pas pourquoi ça bloque (hors la coquille dans le bout de code que j’ai donné, mais j’imagine que ce n’est pas le problème…). Normalement, le break dans le try assure que dès qu’un bind() réussit, on passe à autre chose…

    Encore une fois, sans plus de code, difficile d’aider plus. On peut essayer cette version, sinon (mais c’est le même principe)*:
    ça ne marche pas non plus mon ami.je vous explique ou se trouve l'anomolie:
    quand on entre dans la boucle for (ou while),il va essayé de se connecter via le port 40000.à cet instant là l'instance de cgi n'a pas encore essayé de se connecter avec notre module.ainsi il va dépasser le port 40000 comme si ce port été inutilisable.ensuite il se bloquera dans le port 40001 puisque l'autre instance qui normalement doit etre connecté au port 40000 n'était pas réalisé


    le problème c'est que mes deux instances de cgi se connectent tous les deux respectivement au port 40000 puis au port 40001.
    qu'est ce que j'ai loupé les amis?

Discussions similaires

  1. [Python 2.X] [Ubuntu 14.04] script CGI en Python
    Par f-leb dans le forum Réseau/Web
    Réponses: 3
    Dernier message: 09/11/2014, 15h51
  2. Communication entre deux script Python
    Par fanfouer dans le forum Général Python
    Réponses: 1
    Dernier message: 06/02/2014, 21h38
  3. Communication entre deux scripts python?
    Par kevung dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 09/04/2010, 20h32
  4. Réponses: 7
    Dernier message: 18/04/2008, 20h07
  5. Réponses: 3
    Dernier message: 05/04/2005, 14h26

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