人々がコードについてあまりにも心配しているので、私はこれを書き直しています、そしてそれは問題ではありません。
私が抱えている問題は、通常のJavaコンソールアプリケーションでTCPソケットからの読み取りを実行できることです。
Androidでまったく同じことをしようとすると、read()が返されません。Androidクライアントとサーバー間の接続を終了しない限り、そこにあるだけで何もしません。
人々がコードについてあまりにも心配しているので、私はこれを書き直しています、そしてそれは問題ではありません。
私が抱えている問題は、通常のJavaコンソールアプリケーションでTCPソケットからの読み取りを実行できることです。
Androidでまったく同じことをしようとすると、read()が返されません。Androidクライアントとサーバー間の接続を終了しない限り、そこにあるだけで何もしません。
プロトコルが間違っているため、デッドロックが発生します。
サーバーは、クライアントに行を書き込むことから始めます。次に、クライアントからのラインを待ちます。
一方、クライアントは、読み取るものがなくなるまでサーバーから読み取りを開始し、read()
メソッドは -1 を返します。これは、サーバーがクライアントへの出力ストリームを閉じたときにのみ発生します。したがって、クライアントはサーバーからの次の文字を待ち、サーバーはクライアントからの最初の行を待ちます。デッドロック。
一般に、クライアント コードとサーバー コードは対称である必要があります。一方の側で行を送る場合は、反対側の行を読む必要があります。
それが何であるかはわかりませんが、 readLine() を使用すると機能しました。今気づいた前に見逃したことがあったかもしれませんが、うまくいきました。
将来この問題が発生する人には、サーバーがテキストを送信しているときに read() を避けることができますか? 私はわかりません。
しかし、はい、申し訳ありません JB、私のコードは正常に動作します。設計上無限にループします。テストを行うためにダミープログラムを実行しただけです。