0

人々がコードについてあまりにも心配しているので、私はこれを書き直しています、そしてそれは問題ではありません。

私が抱えている問題は、通常のJavaコンソールアプリケーションでTCPソケットからの読み取りを実行できることです。

Androidでまったく同じことをしようとすると、read()が返されません。Androidクライアントとサーバー間の接続を終了しない限り、そこにあるだけで何もしません。

4

2 に答える 2

3

プロトコルが間違っているため、デッドロックが発生します。

サーバーは、クライアントに行を書き込むことから始めます。次に、クライアントからのラインを待ちます。

一方、クライアントは、読み取るものがなくなるまでサーバーから読み取りを開始し、read()メソッドは -1 を返します。これは、サーバーがクライアントへの出力ストリームを閉じたときにのみ発生します。したがって、クライアントはサーバーからの次の文字を待ち、サーバーはクライアントからの最初の行を待ちます。デッドロック。

一般に、クライアント コードとサーバー コードは対称である必要があります。一方の側で行を送る場合は、反対側の行を読む必要があります。

于 2013-02-25T21:18:24.880 に答える
0

それが何であるかはわかりませんが、 readLine() を使用すると機能しました。今気づいた前に見逃したことがあったかもしれませんが、うまくいきました。

将来この問題が発生する人には、サーバーがテキストを送信しているときに read() を避けることができますか? 私はわかりません。

しかし、はい、申し訳ありません JB、私のコードは正常に動作します。設計上無限にループします。テストを行うためにダミープログラムを実行しただけです。

于 2013-02-25T23:34:13.713 に答える