我在Ubuntu中使用C ++ Thrift服务器,在Windows上使用C#Thrift客户端使用SSL传输文件数据。数据流了一段时间,但之后我在C#客户端得到一个例外:
无法从传输连接读取数据:连接 尝试失败,因为关联方没有正确回应 一段时间后,或建立连接失败,因为 连接主机未能响应。 ---> System.Net.Sockets.SocketException:连接尝试失败 因为关联方在一段时间后没有正确回应 时间或已建立的连接因连接的主机而失败 未能回复
但是如果我使用netstat检查Ubuntu,我仍然会看到连接存在。
这是我在客户端上的代码段
Thrift.Transport.TSSLSocket socket = new TSSLSocket("192.168.0.227", 9092, 300, "cert.pem");
TBufferedTransport t = new TBufferedTransport(socket);
TBinaryProtocol protocol = new TBinaryProtocol(t);
FileThriftAgent.Client fagent = new FileThriftAgent.Client(protocol);
t.Open();
try
{
// reading data from a file and sending the data to the server
ret = fagent.sendData(fname, data, datalen);
if(!ret)
{
log.info("Data sending Failed");
}
}
catch (System.IO.IOException e)
{
log.info("IO EXCEPTION:"+e);
}
在c ++服务器端,我正在使用TThreadedServer
void Serve() {
boost::shared_ptr<TSSLSocketFactory> sslSocketFactory(new SSLSocketFactory());
sslSocketFactory->server(true);
sslSocketFactory->ciphers("ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
sslSocketFactory->loadCertificate("cert.pem");
sslSocketFactory->loadPrivateKey("cert.pem");
sslSocketFactory->authenticate(false);
boost::shared_ptr<FileThriftAgentHandler> handler(this);
boost::shared_ptr<TServerSocket> serverTransport(new TSSLServerSocket(port, sslSocketFactory));
TServerSocket(port));
boost::shared_ptr<TProcessor> processor(new FileThriftAgentProcessor(handler));
boost::shared_ptr<TTransportFactory> transportFactory(new TBufferedTransportFactory());
boost::shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());
TThreadedServer server(processor, serverTransport, transportFactory, protocolFactory);
server.serve();
}