43l*_*v3k 4 python java 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()
}
Run Code Online (Sandbox Code Playgroud)
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.'
Run Code Online (Sandbox Code Playgroud)
Java客户端代码
TTransport transport;
transport = new TSocket("localhost", 9091);
transport.open();
TProtocol protocol = new TBinaryProtocol(transport);
client = new TestPing.Client(protocol);
client.ping();
Run Code Online (Sandbox Code Playgroud)
参考Python客户端代码
transport = TSocket.TSocket('localhost', 9091)
transport = TTransport.TBufferedTransport(transport)
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = TestPing.Client(protocol)
transport.open()
client.ping()
transport.close()
Run Code Online (Sandbox Code Playgroud)
小智 5
我遇到过同样的问题.用ip修复"localhost"替换它.
原因是:Python使用TCPV6,其中Java使用TCP.
蟒蛇:
transport = TSocket.TServerSocket(host="127.0.0.1", port = 9091)
Java的:
transport = new TSocket("127.0.0.1", 9091);