• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javaのsocket通信で20KB以上の文字列を)

javaのsocket通信で20KB以上の文字列を

このQ&Aのポイント
  • javaのsocket通信で20KB以上の文字列を送信する際に通信が途中で止まってしまう問題が発生しています。
  • 文字列を分割して送るなどの対策は行っていますが、根本的な解決には至っていません。
  • InputStreamReaderとBufferedReaderを使用して問題を解決する方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • _kappe_
  • ベストアンサー率68% (1581/2304)
回答No.1

明らかにおかしい部分が複数あります。 //データ受け取り byte[] buffer = new byte[4096]; try { int size = 0; while (size <= 0) { ★1 size = is.read(buffer); } receiveStr = new String(buffer, 0,size, "UTF8"); ★2 } catch (IOException e) { e.printStackTrace(); } ★1 このループ条件だと、 ・is.read(buffer)でデータを読み込めた場合(最大4096バイト)にはすぐにwhileループ脱出 ・データを読み込めなかった場合(ストリームの終わりに達していた場合)は、無駄なis.read()を永遠に繰り返す という動作になってしまいます。 これでは、サーバーが4096バイトを超えるデータを送ってきた場合、4097バイト目以降を端末側が読むことはありません。 サーバー側のデータ受け取りコードにも同じ問題があります。 ★2 bufferに入っているのは圧縮がかかったデータのはずです。圧縮されたままのデータを使ってnew String()を実行したら、得られるのは文字化けしたデータです。

nakisan2011_12
質問者

お礼

ありがとうございます、こちらのコードを参考にしてもう一度組んでみたいと思います。