問題
接続を確認するために、ソケット クライアントの最初のバイトを読み取ります。
ByteBuffer b = ByteBuffer.allocate(4);
b.order(ByteOrder.BIG_ENDIAN);
...
int dataInt = clientSocket.getInputStream().read();
ドキュメンテーション:
このストリームから 1 バイトを読み取り、0 ~ 255 の範囲の整数として返します。ストリームの末尾に到達した場合は -1 を返します。
その後、このバイトを次の入力文字列にスプライスしたいと思います。この整数バイトを文字に変換します
b.putInt(dataInt);
byte[] dataByte = b.array();
final String data;
確認してください。dataInt != -1 の場合、このトリミングされたバイトを新しい文字列に戻す必要があります。
if(dataInt != -1)
{
String c = new String(dataByte);
Log.v("MSG", c);
data = c + inToServer.readLine();
}
else
{
data = inToServer.readLine();
}
ログに "MSG, ������MY MESSAGE" と表示されるのはなぜですか? 文字列を正しく取得するには?
Upd、メッセージの送信方法:
byte[] buf = str.getBytes("UTF-8");
outToServer.write(buf, 0, buf.length);
outToServer.writeBytes("\n");
outToServer.flush();