問題
ソケットサーバーからクライアントにメッセージ「12345」を送信します。
myPrintWriter.println("12345");
その後、クライアントで次のメッセージを読みました。
int c;
while ((c = inputStream.read( )) != -1)
{
byte[] buffer2 = new byte[1];
buffer2[0] = (byte) c;
String symbol = new String(buffer2 , "UTF-8");
String symbolCode = Integer.toString((int)buffer2[0]);
Log.v(symbol, symbolCode);
}
Log.v("c == -1", "Disconnected");
ログに表示される内容:
と
out.println("abcrefg");
なんで?回線終端記号だと思います。文字列「12345」またはその他の次の文字列を正しく取得する必要があります。お願い助けて。
bufferedReader.readLine() を使用する場合:
try
{
byte[] b1 = new byte[1];
int dataInt = clientSocket.getInputStream().read();
b1[0] = (byte)dataInt;
final String data;
if(dataInt == -1)
connectionIsLost();
if(dataInt != -1)
{
String c = new String(b1, "UTF-8");
data = c + inToServer.readLine();
}
else
data = inToServer.readLine();
if (data != null)
{
Log.v("data", data);
runOnUiThread(new Runnable()
{
//data parsing
});
}
}
catch (IOException e){...}
メッセージの送信が遅い場合:
> V/data(5301): -3#Leo#alone in the dark 11-12
> V/message(5301): Leo: alone in the dark 11-12
> V/data(5301): -3#Leo#cgh 11-12
> V/message(5301): Leo: cgh 11-12
> V/data(5301): -3#Leo#c
> V/message(5301): Leo: c 11-12
> V/data(5301): -3#Leo#x 11-12
> V/message(5301): Leo: x
> V/data(5301): -3#Leo#d 11-12
> V/message(5301): Leo: d
しかし、私がそれをより速く行うと:
> V/data(5512): -3#Leo#fccc
> V/message(5512): Leo: fccc
> V/data(5512): -3#Leo#ccc
> V/data(5512): -3#Leo#cccc
> V/message(5512): Leo: ccc
> V/message(5512): Leo: cccc
> V/data(5512): --3#Leo#cccc //<-----error
> V/data(5512): 3-3#Leo#cccc //<-----error
> V/data(5512): #Leo#xdd
例外 :(