I've recently tried to connect Python to Java using Thrift.
I've written a server on Python (PyPy). I've also written a reference client which works.
Then I've written a Java client which produces only a 'Connection refused' exception.
What's wrong with this? (Recently I've also found a closed issue featuring this problem https://issues.apache.org/jira/browse/THRIFT-1888)
PS. Used Thrift 0.9 release, PyPy 2.0 beta 2, Java 1.7.0_11
test.thrift
namespace java com.test
namespace python test
service TestPing {
void ping()
}
Python server code
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 client code
TTransport transport;
transport = new TSocket("localhost", 9091);
transport.open();
TProtocol protocol = new TBinaryProtocol(transport);
client = new TestPing.Client(protocol);
client.ping();
Reference Python client code
transport = TSocket.TSocket('localhost', 9091)
transport = TTransport.TBufferedTransport(transport)
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = TestPing.Client(protocol)
transport.open()
client.ping()
transport.close()
I had the same issue. Replacing "localhost" with the ip fixed it.
The reason was: Python used TCPV6, where Java used TCP.
Python:
transport = TSocket.TServerSocket(host="127.0.0.1", port = 9091)
Java:
transport = new TSocket("127.0.0.1", 9091);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With