0

Androidデバイスでソケットサーバーを実行しています。次に、クライアントからサーバーに文字列を送信すると、サーバーは同じものを返します(エコーサーバー)。私がやろうとしているのは、私が送信したものだけでなく、他の文字列も取得することです。サーバーコードは次のとおりです。

boolean finished = false;   
try {
  DataInputStream in = new DataInputStream(client.getInputStream());
  PrintStream out = new PrintStream(client.getOutputStream());                                
  // Print a message:
  System.out.println("Client from : " + client.getInetAddress() + " port " + client.getPort());
  // now get the input from the socket...
  while(!finished) {
    String st = in.readLine();
    // Send the same back to client
    if (st.equals("hello")) {
      cur = dbHelper.getRandomQuestion();
      String question = cur.getString(cur.getColumnIndex("QUESTIONS"));
      String answer1 = cur.getString(cur.getColumnIndex("ANSWER1"));
      String answer2 = cur.getString(cur.getColumnIndex("ANSWER2"));
      String answer3 = cur.getString(cur.getColumnIndex("ANSWER3"));
      String answer4 = cur.getString(cur.getColumnIndex("ANSWER4"));
      out.println(question);                                        
    }                                    
    out.println(st);

クライアントコードは次のとおりです。

InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
Log.d("ClientActivity", "C: SENDING...");
Socket socket = new Socket(serverAddr, 5000);
System.out.println("Connected to " + socket.getInetAddress() + ":" + socket.getPort());
connected = true;
while(connected) {
  try {                         
    BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream() ) );                        
    PrintStream out = new PrintStream(socket.getOutputStream());                                            
    out.println(data.getText());                                 
    line = in.readLine();  // read server
    System.out.println("Echo: " + line);
    handler.post(updateUI); // here i change a textview to show the echoed string
    in.close();  // Close stream
    out.close();
  } catch (Exception e) {
    Log.e("ClientActivity", "S: Error", e);                             
  }

  connected = false;
}

answer1,answer2,asnwer3,answer4 も返したいです。どうすればそれができますか?

4

1 に答える 1

1

あなたは Strins を扱っているので、readUTF() と writeUTF() を使用することをお勧めします。ポイントは、一度に 1 つの文字列しか送信できないことです。より多くの文字列を送信する場合は、単一の文字列を作成し、文字列の間に一種のスペーサーを配置する必要があります。

同様のことを書いたとき、改行文字をスペーサーとして使用し、次の方法で文字列をフォーマットしました。

文字列 1 + スペーサー + 文字列 2 + スペーサー + 文字列....

一方、この長い文字列を受け取ったら、split メソッドを使用して文字列の配列を取得できます。

String[] answers = input.slpit(SPACER);
于 2012-05-10T11:44:13.437 に答える