ソケット通信の受信で、InputStreamの終了が認識出来ません。
ソケット通信の受信で、InputStreamの終了が認識出来ません。
(1)下記のネット上で見つけたチャットクライアントのソース"ChatClient.java"を流用しました。
http://www.saturn.dti.ne.jp/~npaka/android/SocketEx/index.html
(2000文字を超えるので掲載出来ません)
チャットサーバもこのサイトのソースを実装しました。この組み合わせで送受信は確認しました。
(2)これに下記のjavaのオープンソースを実装して、バイト読み出しに変更します。
【"java\io\InputStream.java"より】
public int read(byte b[]) throws IOException { //※1
return read(b, 0, b.length); //※2
}
public int read(byte b[], int off, int len) throws IOException {//※3
if (b == null) {
throw new NullPointerException();
} else if ((off < 0) || (off > b.length) || (len < 0) ||
((off + len) > b.length) || ((off + len) < 0)) {
throw new IndexOutOfBoundsException();
} else if (len == 0) {
return 0;
}
int c = read(); //※4
if (c == -1) {
return -1;
}
b[off] = (byte)c;
int i = 1;
try {
for (; i < len ; i++) {
c = in.read();
if (c == -1) {
break;
}
if (b != null) {
b[off + i] = (byte)c;
}
}
} catch (IOException ee) {
}
return i;
}
・リンク先のソース中の入力ストリーム読み出し部の名前の付け替え
size=in.read(w); → size=readsocket(w);
・javaのオープンソース"java\io\InputStream.java"中の名前の付け替え
※1:public int readsocket(byte b[]) throws IOException {
※2:return readsocket2(b, 0, b.length);
※3:public int readsocket2(byte b[], int off, int len) throws IOException {
※4:int c = in.read();
(3)この変更を行うと、※4の“in.read()”で入力ストリームの終了の"-1"が入って来ず、forループから抜けなくなってしまいました。帰って来るのは送信したコードのみです。どこが悪いのでしょうか?