簡體   English   中英

客戶端服務器python -C ++

[英]client server python -C++

我已經使用boost asio和協議緩沖區編寫了簡單的客戶端(C ++)服務器(Python)通信。 我來回傳遞數組。 我將數組從服務器(python)傳遞到客戶端(C ++)時遇到的問題是,我在C ++輸出上的第一個數組只有大約50個元素。 如何解決此問題,我必須傳遞帶有10000個元素的10個數組。

客戶端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;
    }

Python服務器:

    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()

您是否嘗試過使用sendall而不是僅僅發送? 我一直在研究類似的客戶端/服務器(雖然使用純c ++),個人看來對我來說是一個緩沖區問題。

我建議的另一件事是嘗試捕獲回送(如果客戶端/服務器從同一台計算機運行),然后查看數據包以查看實際發送了多少數據。 Wireshark是一個有用的工具。

在send / recv上添加一些錯誤處理也很有用,因此如果您不想進行數據包捕獲,則可以檢查實際發送的總字節數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM