Apache Thrift Python-Java ‘Connexion refusée’

J’ai récemment essayé de connecter Python à Java en utilisant Thrift.

J’ai écrit un serveur sur Python (PyPy). J’ai également écrit un client de référence qui fonctionne.

Ensuite, j’ai écrit un client Java qui ne produit qu’une exception ‘Connexion refusée’.

Qu’est-ce qui ne va pas avec ça? (Récemment, j’ai également trouvé un problème fermé avec ce problème https://issues.apache.org/jira/browse/THRIFT-1888 )

PS Version Thrift 0.9 utilisée, PyPy 2.0 beta 2, Java 1.7.0_11

test.thrift

namespace java com.test namespace python test service TestPing { void ping() } 

Code du serveur 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.' 

Code client Java

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

Code client Python de référence

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

J’ai eu le même problème. Remplacer “localhost” par l’ip corrigé.

La raison était: Python utilisait TCPV6, où Java utilisait TCP.

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

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

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