#c# #java #protocols #protocol-buffers #protobuf-net
#c# #java #протоколы #буферы протокола #protobuf-net
Вопрос:
Я пытаюсь получить некоторые данные от клиента на сервере, используя буферы протокола Google, в частности, csharp-порт Джона Скита. Я делаю следующее:
using Google.ProtocolBuffers;
...
Stream InputStream = client.GetStream();
CodedInputStream input = CodedInputStream.CreateInstance(InputStream);
...
uint length = CodedInputStream.ReadRawVarint32(InputStream);
Я получаю сообщение об ошибке из последней строки, которое я не могу решить: для доступа к нестатическому члену Google требуется ссылка на объект.Буферы протокола.CodedInputStream.ReadRawVarint32()‘.
В основном то, что я хочу сделать, было бы так в версии Java:
InputStream iStream = client.getInputStream();
CodedInputStream input = CodedInputStream.newInstance(iStream);
int read = is.read();
if(-1 != read) {
int length = CodedInputStream.readrawVarint32(read, is);
byte[] bytes = input.readRawBytes(length);
// My proto stuff
Communication.Packet container = null;
try {
container = Communication.Packet.parseFrom(bytes);
} catch (InvalidProtocolBufferException iPBE) {
continue;
}
AbstractMessage message = container;
if(container.hasLogin()) {
message = container.getLogin();
}
System.out.println(message.toString());
Любая помощь?
Заранее спасибо.
Ответ №1:
В сообщении об ошибке указано, что вы пытаетесь получить доступ к нестатическому (т.Е. методу-члену) без использования ссылки на объект. Вам необходимо изменить вызов вашего метода, чтобы он работал с объектом типа CodedInputStream вместо класса CodedInputStream:
input.ReadRawVarint32();