3

私が書いているJavaサーバーがあり、サーバーはクライアントからコマンドを読み取ります。

C#で記述されたクライアントは、json文字列の形式でソケットを介してコマンドを送信します。コマンドは次のようになります

{
 "command": "blah",
 "key1": "value1",
 "key2": "value3",
 "key3": "value4",
}

json文字列は毎回異なる数のキーと値のペアを持つ可能性があるため、jsonコマンドの行数を測定するための静的なカウントはありません。

これがC#クライアントがjson文字列をJavaサーバーに送信する方法です

        String json = JsonConvert.SerializeObject(map, Formatting.Indented);            
        streamWriter.WriteLine(json);
        streamWriter.Flush();

アンドロイドで書かれたJavaコードでjsonを読みたいです。以下のようになります。json行を正しく読み取りますが、jsonコマンドの最後の行を読み取った後にブロックされます。コマンドが終了したことを知るための適切な方法がわかりません。

        serverSocket = new ServerSocket(4444);   
        clientSocket = serverSocket.accept();
        InputStream inStream = clientSocket.getInputStream();           
        InputStreamReader inStreamReader = new InputStreamReader(inStream);          
        BufferedReader buffReader = new BufferedReader(inStreamReader );    

        String input = "";                        

        while((input = buffReader.readLine())!= null)
        {
            command += input;                     
        }

             //Does not get to this point, blocks above on the readLine after reading full json..

        JSONObject jsObj = new JSONObject(input);
        Object ovj = jsObj.get("command");  

jsonを送信する前に何行も送信して、whileループでそれを何度も読み取ることができるかもしれません。しかし、それは汚い解決策のように見えます。それを行う正しい方法を教えてください。

ありがとう、アーメド

4

1 に答える 1

1

を削除するFormatting.Indentedと、すべてbuffReader.readLine()が異なる(完全な)jsonを返します。デシリアライズコードをwhileループに移動します。

于 2012-11-02T10:20:57.730 に答える