Моя проблема в том, что когда я делаю
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. Я думаю, что функция receive делает что-то не так, но не знает, что.
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
Как я могу изменить его, чтобы я мог читать последовательные сообщения из сокета?