Отправка сообщения буфера протокола от клиента Java на сервер C ++ - PullRequest
0 голосов
/ 09 марта 2011

Я пытаюсь отправить сообщение буфера протокола от клиента 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. Пожалуйста, дайте мне знать, если вы видите какие-либо проблемы! Большое спасибо!

1 Ответ

0 голосов
/ 25 мая 2011

Я думаю, что проблема с:

new_sock >> data;

Убедитесь, что число считанных байтов для data совпадает с размером info.toByteArray(). Я предполагаю, что они разные, и в этом случае вам нужно изменить способ read(2) извлечения данных из new_sock (ввод-вывод с разделителями новой строки по умолчанию?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...