Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;应用程序可以';无法从c#应用程序接收连续消息_C++_Protocol Buffers - Fatal编程技术网

C++ c++;应用程序可以';无法从c#应用程序接收连续消息

C++ c++;应用程序可以';无法从c#应用程序接收连续消息,c++,protocol-buffers,C++,Protocol Buffers,我的问题是当我这样做的时候 TcpClient con = new TcpClient ("127.0.0.1", 5432); NetworkStream str = con.GetStream (); Annoucement msg = new Annoucement (); msg.typ = Annoucement.msgType.NOWY_GRACZ; Serializer.SerializeWithLength

我的问题是当我这样做的时候

TcpClient con = new TcpClient ("127.0.0.1", 5432);
            NetworkStream str = con.GetStream ();
Annoucement msg = new Annoucement ();
            msg.typ = Annoucement.msgType.NOWY_GRACZ;

            Serializer.SerializeWithLengthPrefix (str, msg, PrefixStyle.Base128);
            Serializer.SerializeWithLengthPrefix (str, msg, PrefixStyle.Base128);
我尝试使用使用协议缓冲区的自定义库进行接收

Connection con = server.accept();

    Annoucement ann = con.receive();
    cout << ann.typ() << endl;

    ann = con.receive();
    cout << ann.typ() << endl;
在构造函数中初始化一个变量

FileInputStream* raw_input;
 raw_input = new FileInputStream(s);  //s is socket in this example communication
如何修改它,以便从套接字读取连续消息?

从:

将*数据设置为直接指向 CodedInputStream的未读部分 基础缓冲区,以及*到 缓冲区的大小,但不包括 推进流的当前位置

这将始终产生 缓冲区非空或返回false。如果 调用者使用任何这些数据, 然后它应该调用Skip()来跳过 超过消耗的字节数。这可能是 用于实现外部fast 不支持数据类型的解析例程 由CodedInputStream覆盖 接口

我发现您的代码中缺少以下内容:

  • 处理第一次呼叫时两个通知都已在缓冲区中的情况
  • 调用
    coded_input.Skip()
    (如果使用正确,应涵盖上述第1部分)
  • 错误处理(包括呼叫时缓冲区中没有通知的情况)
  • 我猜您的问题是由上面的#3引起的,但在我看到
    ParseFromArray
    代码之前我不确定

    将*数据设置为直接指向 CodedInputStream的未读部分 基础缓冲区,以及*到 缓冲区的大小,但不包括 推进流的当前位置

    这将始终产生 缓冲区非空或返回false。如果 调用者使用任何这些数据, 然后它应该调用Skip()来跳过 超过消耗的字节数。这可能是 用于实现外部fast 不支持数据类型的解析例程 由CodedInputStream覆盖 接口

    我发现您的代码中缺少以下内容:

  • 处理第一次呼叫时两个通知都已在缓冲区中的情况
  • 调用
    coded_input.Skip()
    (如果使用正确,应涵盖上述第1部分)
  • 错误处理(包括呼叫时缓冲区中没有通知的情况)
  • 我猜您的问题是由上面的#3引起的,但在看到
    ParseFromArray
    代码之前我不确定

    FileInputStream* raw_input;
     raw_input = new FileInputStream(s);  //s is socket in this example communication