Apache Thrift Python-Java'拒绝连接'

时间:2013-05-26 15:29:39

标签: java python windows networking thrift

我最近尝试使用Thrift将Python连接到Java。

我在Python(PyPy)上编写了一个服务器。我还写了一个有效的参考客户端。

然后我编写了一个Java客户端,它只产生一个'连接拒绝'异常。

这有什么问题? (最近我还发现了一个关于这个问题的封闭式问题https://issues.apache.org/jira/browse/THRIFT-1888

PS。使用Thrift 0.9版本,PyPy 2.0 beta 2,Java 1.7.0_11

test.thrift

namespace java com.test
namespace python test

service TestPing {
   void ping()
} 

Python服务器代码

class TestPingHandler:
  def ping(self):
    pass

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

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

print 'Starting the server...' 
server.serve()
print 'done.' 

Java客户端代码

TTransport transport;
transport = new TSocket("localhost", 9091);
transport.open();
TProtocol protocol = new TBinaryProtocol(transport);
client = new TestPing.Client(protocol);
client.ping();

参考Python客户端代码

transport = TSocket.TSocket('localhost', 9091)
transport = TTransport.TBufferedTransport(transport)
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = TestPing.Client(protocol)
transport.open()
client.ping()
transport.close()

2 个答案:

答案 0 :(得分:5)

我有同样的问题。 替换" localhost"用ip修复它。

原因是:Python使用TCPV6,其中Java使用TCP。

的Python:     transport = TSocket.TServerSocket(host="127.0.0.1", port = 9091)

爪哇:     transport = new TSocket("127.0.0.1", 9091);

答案 1 :(得分:0)

transport = new TSocket("localhost", 9091);
TProtocol protocol = new TBinaryProtocol(transport);
transport.open();

This should work...