私はAndroid上でアプリケーションを作成していますが、サーバー(C言語で記述したもの)が消滅したりシャットダウンされたときを知りたいと思っています。私は、サーバーがクライアント(Androidアプリ)に指定された間隔でメッセージを送信するようにすることでこれを実装しようとしています。このメッセージが表示されない場合、クライアントはサーバーに接続されていないことを認識します。 TCPソケットを使用して通信します。Javaクライアントに接続されたCサーバーソケットの問題
私の問題は、Androidアプリケーションがサーバーの書き込み内容を読み取れないように見えることです。サーバーソケットから読み取ろうとするコードの最初の部分に到達すると、ハングアップします。 Androidアプリケーションでは、BufferedReaderを使用してソケットtmpstr = inFromServer.readLine();
から読み込みます。ここで、tmpstrは文字列で、inFromServerはBufferedReaderであり、Cサーバはwrite write(newsockfd,"I got your message",18);
を使用しています。
また、私の基本的なプログラムロジックが間違っているかどうかを確認するために、別のJavaサーバーを使用してみました。テストサーバーはPrintWriterを使用し、Androidクライアントと完全に連携しました。
私はここで何が欠けていますか? JavaとCのデータをバッファリングする(またはバッファしない)方法に違いはありますか?追加情報が必要な場合は、私に知らせてください。
編集:クライアントから送信されたデータをCサーバに読み込ませることに問題はありません。私は、クライアントからサーバーから送信されたデータを読み取ることに問題があります。
編集:サーバーがクライアントに送信する文字列に改行文字(\n
)を追加することで問題を解決しました。
改行を待っていませんか?しかし、あなたに改行を送ることができません... – gnud
改行文字 '' \ r \ n "'を送ろうとしましたか? – user786653
Javaは送信するデータに自動的に改行を追加しますか?私は 'outToServer.println(" some strings ");'を使い、サーバはそれをうまく読み込めます。編集:私は、改行文字を送信しようとし、それが役立つかどうかを見てみましょう。私はその結果をすぐに取り戻すつもりです。 – purpletreefactory