2011-09-21 13 views
8

Ciao Sto cercando di scrivere un semplice server di risparmio in python (denominato PythonServer.py) con un singolo metodo che restituisce una stringa per scopi di apprendimento. Il codice del server è sotto. Sto avendo i seguenti errori nelle librerie Python di Thrift quando eseguo il server. Qualcuno ha riscontrato questo problema e suggerisce una soluzione alternativa?Problema: TypeError: getaddrinfo() argomento 1 deve essere stringa o None

L'output esecuzione:

Starting server 
    Traceback (most recent call last): 
    File "/home/dae/workspace/BasicTestEnvironmentV1.0/src/PythonServer.py", line  38,  in <module> 
    server.serve() 
    File "usr/lib/python2.6/site-packages/thrift/server/TServer.py", line 101, in serve 
    File "usr/lib/python2.6/site-packages/thrift/transport/TSocket.py", line 136, in  listen 
    File "usr/lib/python2.6/site-packages/thrift/transport/TSocket.py", line 31, in  _resolveAddr 
    TypeError: getaddrinfo() argument 1 must be string or None 

PythonServer.java

 port = 9090 

    import MyService as myserv 
    #from ttypes import * 

    # Thrift files 
    from thrift.transport import TSocket 
    from thrift.transport import TTransport 
    from thrift.protocol import TBinaryProtocol 
    from thrift.server import TServer 

    # Server implementation 
    class MyHandler: 
     # return server message 
     def sendMessage(self, text): 
      print text 
      return 'In the garage!!!' 


    # set handler to our implementation 
    handler = MyHandler() 

    processor = myserv.Processor(handler) 
    transport = TSocket.TServerSocket(port) 
    tfactory = TTransport.TBufferedTransportFactory() 
    pfactory = TBinaryProtocol.TBinaryProtocolFactory() 

    # set server 
    server = TServer.TThreadedServer(processor, transport, tfactory, pfactory) 

    print 'Starting server' 
    server.serve() ##### LINE 38 GOES HERE ########## 

risposta

18

tuo problema è la linea:

transport = TSocket.TServerSocket(port) 

Quando si chiama TSocket.TServerSocket che un singolo argomento, viene trattato il valore come identificativo dell'host, quindi l'errore con getaddrinfo().

Per rimediare, cambiare la linea a:

transport = TSocket.TServerSocket(port=port) 
+1

Sì, effettivamente questo ha aiutato. Molte grazie. – farda

+0

Prego. –

+1

@farda Si prega di premiare le risposte corrette facendo clic sulla casella di controllo. – wberry

3

Ho avuto questo problema durante l'esecuzione PythonServer.py ...
Ho cambiato questa linea

transport = TSocket.TServerSocket(9090) 

a

transport = TSocket.TServerSocket('9090') 

e il mio server è stato avviato.

+0

//, Anche se questo non corrisponde al problema specifico della domanda, penso che ciò aiuterebbe le persone a cercare l'errore ottenuto dall'OP. Grazie per aver contribuito, @ Madhav Ramesh. –

0

Ho avuto un problema simile. La mia correzione è

TSocket.TServerSocket('your server ip',port) 
Problemi correlati