客户端服务器python-C++;

客户端服务器python-C++;,python,c++,client,protocol-buffers,Python,C++,Client,Protocol Buffers,我已经使用boostasio和protocolbuffer编写了简单的客户端(C++)服务器(Python)通信。我来回传递数组。我的问题是,当我从服务器(Python)传递到客户端(C++)时,我的C++输出只有50个数组的第一个元素。如何解决这个问题我必须通过10个10000个元素的数组 代码客户端C++读取客户端数据: boost::asio::transfer_exactly(65536) */); boost::asio::streambuf b;

我已经使用boostasio和protocolbuffer编写了简单的客户端(C++)服务器(Python)通信。我来回传递数组。我的问题是,当我从服务器(Python)传递到客户端(C++)时,我的C++输出只有50个数组的第一个元素。如何解决这个问题我必须通过10个10000个元素的数组

代码客户端C++读取客户端数据:

            boost::asio::transfer_exactly(65536) */);
    boost::asio::streambuf b;
    boost::asio::streambuf::mutable_buffers_type bufs = b.prepare(10000000);
    size_t n = socket.receive(bufs);

    b.commit(n);
    std::istream is(&b);
    std::string s;
    is >> s;


     object1.ParseFromString(s);
     std::cout << object1.DebugString();
            // this line doesn't output allarray's elemenents. 


}
catch (std::exception& e)
{
    //std::cerr << e.what(luuu) << std::endl;
}
std::cout << "\nClosing";
std::string dummy;
    }
您是否尝试使用而不是仅发送?我一直在研究一个类似的客户机/服务器(纯C++),而我个人看来,它是一个缓冲问题。p> 我建议的另一件事是尝试捕获环回(如果客户机/服务器在同一台机器上运行),并查看数据包以查看实际发送的数据量。Wireshark是一个非常有用的工具


在send/recv上添加一些错误处理也会很有用,这样如果您不想捕获数据包,就可以检查实际发送的总字节数。

data=client.recv(50000)
--您是如何确定50000的?够大吗?我想您需要一些消息通信协议,发送方将消息的长度编码在固定长度的报头中。在python端,它很完美,50000就可以了。但是在C++客户端上我写了10000000个(我多次改变了缓冲区的大小,但是总是有相同的结果)。所以我认为问题不在于bufferNo send看起来还可以。现在我发现了问题,但不知道如何解决它。我分配的缓冲区大小=5000(最大大小为429496)。我在这方面的问题与b.commit(n);std::istream is(&b);字符串s的大小为119,这是不可接受的。
    import socket 
    from test_pb2 import Person
    import dataf_pb2

    host = 'localhost'
    port = 10000
    backlog = 55
    size = 1024 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    s.bind((host,port))
    s.listen(backlog)

    element = dataf_pb2.ParticleMatrix()
    for i in range(1000):
    element.xPox.append(i * 0.53434)

    for i in range(1000):
    element.yPox.append( i * 0.53434)

    for i in range(1000):
    element.zPox.append(i * 0.53434)

    message= element.SerializeToString()
    element1 = dataf_pb2.ParticleMatrix()

    while 1: 
      client, address = s.accept()
      print ('Client connected')
      data = client.recv(50000)
      print data
      if data:
      object1 = dataf_pb2.ParticleMatrix()
      object1.ParseFromString(data)
      print object1.__str__()
      print object1.ListFields()
      client.send(message)
      client.close()