• 締切済み

Socket通信を待ち受け状態にするには

Androidアプリの開発でJavaのSocketを使って通信しようと考えています。 現在、ソースが手元にない状態なのですが、 SocketDebuggerをサーバとして、クライアントプログラムを書きました。 流れは、指定のポート、アドレスに接続して入力された文字列をサーバが受け取り、 メッセージを返信するものです。 なのですが、サーバ側から再度メッセージを送信したときに今度はクライアント側で 受け取りそれにまた返信する…ということをやりたいのですが、今の状況ではサーバからのメッセージを受け取ることが出来ません。 プログラムは以下のサイトを参考にして少し書き換えました。 http://team-pag.interprism.co.jp/member/okazawa/blog/?p=687 今のままだとクライアント側から送信するとそのまま接続が終了してしまうのですが、 たとえば「exit」を受け取ったら接続をやめる、、それまではサーバからのメッセージも受け取れる状態にする…というようにやりたいです。 ご教授お願いします!!

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

技術的にはServerSocketを作り、bind、acceptで ソケット通信のサーバ側は処理します。 しかし、その前にプロトコルはどうなっていますか? サーバからデータが無秩序に送られてくるような プロトコルなんでしょうか? よくあるFTPなどは1要求1応答と決まっています。 大量のデータを受け渡す時はデータ用ソケットを別に 作って処理します。 この時はクライアント側がサーバのように振舞いますが、 相手(サーバ)に自分(クライアント)のアドレスを知らせる 必要があるので、accept前にアドレスを通知する要求を サーバに送るようになっています。 無秩序な送受信(TELNETはこのタイプ)なら、ソケットを 閉じなければよいだけの話です。 その他に、受信は受身で対応しなければならない性格 から、本体とは別のスレッドで処理するのが普通です。 また、通信は相手と通信経路の問題があるので、何時 切断されるか分かりません。そういった対処も考えて おかなければなりません。 経験的に見てマルチスレッドでないと実用的なものは 難しいでしょう。