无法从传输连接中读取数据

时间:2015-05-22 13:36:53

标签: c# thrift

我在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();
}

0 个答案:

没有答案