プロが教える店舗&オフィスのセキュリティ対策術

Androidアプリの開発でJavaのSocketを使って通信しようと考えています。
現在、ソースが手元にない状態なのですが、

SocketDebuggerをサーバとして、クライアントプログラムを書きました。
流れは、指定のポート、アドレスに接続して入力された文字列をサーバが受け取り、
メッセージを返信するものです。

なのですが、サーバ側から再度メッセージを送信したときに今度はクライアント側で
受け取りそれにまた返信する…ということをやりたいのですが、今の状況ではサーバからのメッセージを受け取ることが出来ません。

プログラムは以下のサイトを参考にして少し書き換えました。
http://team-pag.interprism.co.jp/member/okazawa/ …
今のままだとクライアント側から送信するとそのまま接続が終了してしまうのですが、
たとえば「exit」を受け取ったら接続をやめる、、それまではサーバからのメッセージも受け取れる状態にする…というようにやりたいです。

ご教授お願いします!!

A 回答 (1件)

技術的にはServerSocketを作り、bind、acceptで


ソケット通信のサーバ側は処理します。

しかし、その前にプロトコルはどうなっていますか?
サーバからデータが無秩序に送られてくるような
プロトコルなんでしょうか?

よくあるFTPなどは1要求1応答と決まっています。
大量のデータを受け渡す時はデータ用ソケットを別に
作って処理します。
この時はクライアント側がサーバのように振舞いますが、
相手(サーバ)に自分(クライアント)のアドレスを知らせる
必要があるので、accept前にアドレスを通知する要求を
サーバに送るようになっています。

無秩序な送受信(TELNETはこのタイプ)なら、ソケットを
閉じなければよいだけの話です。

その他に、受信は受身で対応しなければならない性格
から、本体とは別のスレッドで処理するのが普通です。
また、通信は相手と通信経路の問題があるので、何時
切断されるか分かりません。そういった対処も考えて
おかなければなりません。
経験的に見てマルチスレッドでないと実用的なものは
難しいでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!