2011-09-21 121 views
8

您好我想用一种方法为python(名为PythonServer.py)编写一个简单的节俭服务器,该方法返回一个用于学习目的的字符串。服务器代码如下。当我运行服务器时,我在Thrift的python库中出现以下错误。有没有人遇到过这个问题并提出解决方法?Thrift:TypeError:getaddrinfo()参数1必须是字符串或无

执行输出:

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

回答

18

您的问题是该行:

transport = TSocket.TServerSocket(port) 

当调用TSocket.TServerSocket其中一个参数,则将该值视为作为主机标识符,因此与getaddrinfo()错误。

为了解决这个问题,行更改为:

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

是的,这确实有帮助。非常感谢。 – farda

+0

不客气。 –

+1

@farda请点击复选框以奖励正确的答案。 – wberry

3

我有这个问题,同时运行PythonServer.py ...
我改变了这一行

transport = TSocket.TServerSocket(9090) 

transport = TSocket.TServerSocket('9090') 

和我的服务器开始运行。

+0

//,虽然这不符合问题的具体问题,但我认为这会帮助人们搜索OP得到的错误。感谢您的贡献,@Madhav Ramesh。 –

0

我有类似的问题。我的修复程序是

TSocket.TServerSocket('your server ip',port) 
相关问题