2010-07-09 4 views
1

J'ai mis en place un script client-serveur simple comme ceci:dataReceived côté client ne fonctionne pas?

Serveur:

class Server(Protocol): 

    def connectionMade(self): 
    while True: 
     self.transport.write('a') 

client

class Client(Protocol): 
    def dataReceived(self, data): 
    print data 

Ce que je pensais était une chaîne de l'infini une WAS imprimée sur la fenêtre du client, mais en fait, il n'y a rien paru. Lorsque je remplace la boucle while du serveur par une boucle finie, cela fonctionne. Donc, il semble que la fonction connectionMade doit être terminée avant que toutes les données peuvent apparaître sur le côté client? Ai-je tort?

+0

Je suis assez confiant que vous avez raison. –

Répondre

0

Vous avez raison. Tant que connectionMade fait des choses, aucune donnée n'a encore été écrite sur le socket. transport.write(x) ne signifie pas "écrire immédiatement x" dans le socket ", cela signifie" lorsque le socket a un espace tampon libre, écrivez "x" à celui-ci ".

L'exemple, comme vous l'exprimer:

def connectionMade(self): 
    while True: 
    self.transport.write('a') 

alloue simplement un tampon infiniment grand plein de « a ', l'allocation de mémoire jusqu'à ce qu'il se bloque.