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

私はいま、独学でJava言語の勉強をしています。
おそらく初歩的な質問ですが、いくら検索をしても見つからなかったため、質問させていただきます。

JavaでTCPを使ってソケット通信をする際の質問です。

WiFiのアクセスポイントAとアクセスポイントBがあるとします。
クライアントのアプリケーションが、アクセスポイントAからインターネットに接続し、サーバのIPアドレスとポート番号を使ってソケットを作り、サーバとTCP通信をしているとします。
このとき、クライアントが動いて、アクセスポイントBに接続したとします(接続が自動で切り替わる)。
このような場合でも、サーバとクライアントのコネクションは保っていられるのでしょうか?

もしくは、このような場合でもコネクションを保つ方法はあるのでしょうか?

よろしくお願いします。

A 回答 (2件)

アクセスポイントを替えるということは、通信網の瞬断を意味すると思いますので、切断エラーが発生してソケット通信を保つことは難しいでしょう。


もしTCP/IP の機能で大丈夫であったとしても、恐らくクライアントは別な網へ接続されるため、DHCPとかIPマスカレードなどの原因によってサーバーからは別なクライアントと認識され、どうあっても同じソケットを保つことは出来ないと推測します。
http://www.ccjc-net.or.jp/~kouza/199805/dhcp1.html
http://e-words.jp/w/IPE3839EE382B9E382ABE383ACE3 …

なので接続を保つためには、ソケットより上位層のアプリケーション的な仕組みが必要でしょう。
たとえば HTTP などは、Cookieや部分的GETやETagなどの仕組みを導入することで、ソケット接続が別であっても通信内容は継続することが出来ます。
http://www.studyinghttp.net/cookies
http://www.studyinghttp.net/range
http://ja.wikipedia.org/wiki/HTTP_ETag

ただ、これを自分で実装するのはとても大変かと思いますので、耐障害性の強い既存のプロトコルを実装した JAR ライブラリの導入を検討するのが、一番簡単かと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
屋内の場所に依存したゲームを作ってみたかったのでこのような質問をさせて頂きました。
アプリ層でクライアントを認識する仕組みを作れれば良さそうですね。Javaだけで完結させようと思っていましたが、他の方法を考えてみようと思います。
ありがとうございました。

お礼日時:2013/10/03 01:43

>>このような場合でも、サーバとクライアントのコネクションは保っていられるのでしょうか?


もしくは、このような場合でもコネクションを保つ方法はあるのでしょうか?

これは、Javaがどうこうという問題ではなく、(処理内容としては、OS側に近いですし)「システムにどういうふうな機能を持たせたいか」という作り手の問題だと思います。
システムは、「人間がこうして欲しい」という意志を持っても、多くの場合、それを感じて動いてくれません。
マニュアル等でしっかりと書かれていることは、そのとおりに動作してくれると思いますが、記載されていないことは、どうなるかわかりません。
たぶん、記載されていないケースについては、自分でそういうケースの動作確認をして、ダメな場合は、その機能を(Javaだけで対応可能かどうか不明ですが)作りこむことになると思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
やはりJavaだけで完結できるか難しい問題なのですね。

屋内の場所に依存したゲームを作ってみたかったのでこのような質問をさせて頂きました。
もう少し他の仕組みを考えてみたいと思います。
ありがとうございました。

お礼日時:2013/10/03 01:43

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