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