Я пытаюсь отправить сообщение буфера протокола от клиента Java на сервер C ++. После запуска сервера и клиента я просто получаю «0» в качестве значения для поля Api, даже если я установил его как «1» на стороне клиента Java.
Код клиента Java выглядит следующим образом:
public static void main(String[] args) throws IOException {
Socket echoSocket = null;
PrintWriter out = null;
BufferedReader in = null;
//the protocol buffers message is called INFO and have only one field Api
INFO info = INFO.newBuilder()
.setApi(1)
.build();
try {
echoSocket = new Socket("localhost", 30000);
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(
echoSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Don't know about host: Localhost.");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for "
+ "the connection to: Localhost.");
System.exit(1);
}
out.println((info.toByteArray())); // serialize and the message
System.out.println("send ");
}
}
И код сервера C ++ выглядит так:
int main ( int argc, int argv[] ){
INFO info;
try
{
// Create the socket
ServerSocket server ( 30000 );
while ( true )
{
ServerSocket new_sock;
server.accept ( new_sock );
try
{
while(true){
std::string data;
// in the next i'll i receive Data from the Java client i already test it with a string, and it works
new_sock >> data;
info.ParseFromString(data);
cout << "api: " << info.api() << endl;
}
}
catch ( SocketException& ) {}
}
}
catch ( SocketException& e )
{
std::cout << "Exception was caught:" << e.description() << "\nExiting.\n";
}
return 0;
}
Я не уверен, что я делаю неправильно. Я не знаю, правильно ли я сериализирую синтаксический анализ. я не получил никаких ошибок только ложное значение API. Пожалуйста, дайте мне знать, если вы видите какие-либо проблемы! Большое спасибо!