2011-09-21 16 views
8

Hola, estoy tratando de escribir un servidor de ahorro simple en python (llamado PythonServer.py) con un único método que devuelve una cadena con fines de aprendizaje. El código del servidor está abajo. Tengo los siguientes errores en las bibliotecas de Python de Thrift cuando ejecuto el servidor. ¿Alguien ha experimentado este problema y sugiere una solución alternativa?Thrift: TypeError: getaddrinfo() argumento 1 debe ser una cadena o Ninguno

La salida de ejecución:

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 ########## 

Respuesta

18

Su problema es la línea:

transport = TSocket.TServerSocket(port) 

Al llamar TSocket.TServerSocket el que un solo argumento, se trata del valor como un identificador de host, de ahí el error con getaddrinfo().

Para corregir esto, cambie la línea a:

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

Sí, de hecho esto ayudó. Muchas gracias. – farda

+0

De nada. –

+1

@farda Recomienda las respuestas correctas haciendo clic en la casilla de verificación. – wberry

3

he tenido este problema durante la ejecución de PythonServer.py ...
me cambió esta línea

transport = TSocket.TServerSocket(9090) 

a

transport = TSocket.TServerSocket('9090') 

y mi servidor comenzó a funcionar.

+0

//, Aunque esto no coincide con el problema específico de la pregunta, creo que esto ayudaría a las personas a buscar el error que obtuvo el OP. Gracias por contribuir, @Madhav Ramesh. –

0

Tuve un problema similar. Mi solución es

TSocket.TServerSocket('your server ip',port) 
Cuestiones relacionadas