c ++应用程序无法接收来自c#应用程序的连续消息

| 我的问题是当我这样做
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;
我只能读第一个。第二个是错误的,因为字段
typ
设置为0,而应设置为3。
  Annoucement Connection::receive() throw(EmptySocket) {
    CodedInputStream coded_input(raw_input);
    google::protobuf::uint32 n;
    coded_input.ReadVarint32(&n);
    char *b;
    int m;
    coded_input.GetDirectBufferPointer((const void**)&b, &m);
    Annoucement ann;
    ann.ParseFromArray(b, n);
    return ann;
  }
在构造函数中初始化一个变量
FileInputStream* raw_input;
 raw_input = new FileInputStream(s);  //s is socket in this example communication
如何修改它,以便可以从套接字读取连续的消息?     
已邀请:
        从参考:   将* data设置为直接指向   未读的CodedInputStream的一部分   基础缓冲区,并将* size设置为   该缓冲区的大小,但不   提升信息流的当前位置。      这总是会产生   非空缓冲区或返回false。如果   呼叫者会使用任何这些数据,   然后应调用Skip()跳过   超过消耗的字节。这可能是   对实现外部快速很有用   解析例程的数据类型不是   由CodedInputStream覆盖   接口。 我发现您的代码中缺少这些内容: 处理两个通知都已经在第一次呼叫的缓冲区中的情况。 呼叫
coded_input.Skip()
(如果使用正确,应覆盖上面的#1) 错误处理(包括呼叫缓冲区中没有通知的情况)。 我猜您的问题是由上面的#3引起的,但是直到我看到
ParseFromArray
代码,我才能确定。     

要回复问题请先登录注册