2016-09-14 3 views
0

J'essaye de créer un serveur telnet mockup (pour certains tests fonctionnels du code existant). En ce moment j'ai seulement modifié le message de bienvenue de serveur et j'essayais de lire ce message using le code de client, mais la méthode de lecture échoue sur le délai d'attente sans information additionnelle. Mais avec pudb débogueur activé, il fonctionne la plupart du temps ...L'exemple simple client/serveur python telnet ne fonctionne pas

J'utilise virtualenv, avec pudb et telnetsrv installé en utilisant pip. Python 2.7.12, Ubuntu 16.04.

Code Serveur:

import SocketServer 
from telnetsrv.threaded import TelnetHandler 

class MyHandler(TelnetHandler): 

    WELCOME = "HI from custom server" 

class TelnetServer(SocketServer.TCPServer): 
    allow_reuse_address = True 

server = TelnetServer(("0.0.0.0", 8023), MyHandler) 
server.serve_forever() 

code Client:

import telnetlib 

HOST = '127.0.0.1' 
PORT = 8023 
# from pudb import set_trace; set_trace() 
tn = telnetlib.Telnet(HOST, PORT) 

data = tn.read_until("custom server", timeout=1) 
print "Data: " + data 

tn.close() 

sortie du client:

$ python client.py 
Data: 

sortie client avec PUDB activé (avec l'exécution pas-à-pas)

$ python client.py 
Data: HI from custom server 

Bien sûr, quand j'exécute la commande telnet shell, tout fonctionne très bien:

$ telnet 127.0.0.1 8023 
Trying 127.0.0.1... 
Connected to 127.0.0.1. 
Escape character is '^]'. 
HI from custom server 
Telnet Server> 

J'apprécierais vraiment des conseils sur la façon de déboguer ce problème. Merci!

Répondre

0

Assurez-vous que la connexion est en cours. Pour ce faire mettre votre code modifier pour ajouter tn.set_debuglevel (100) dans votre script pour ressembler à ceci:

import telnetlib 

HOST = '127.0.0.1' 
PORT = 8023 
# from pudb import set_trace; set_trace() 
tn = telnetlib.Telnet(HOST, PORT) 
tn.set_debuglevel(100) 
data = tn.read_until("custom server", timeout=1) 
print "Data: " + data 

tn.close() 

Cela permettra d'assurer que toutes les données sont imprimées afin que vous puissiez voir ce qui se passe. Ma théorie est, que vous ne vous connectez pas, ou que vos données ne sortent pas réellement "serveur personnalisé" et par conséquent il ne l'attraperont pas, ou votre délai d'attente est trop bas.