私はいま、独学でJava言語の勉強をしています。
おそらく初歩的な質問ですが、いくら検索をしても見つからなかったため、質問させていただきます。
JavaでTCPを使ってソケット通信をする際の質問です。
WiFiのアクセスポイントAとアクセスポイントBがあるとします。
クライアントのアプリケーションが、アクセスポイントAからインターネットに接続し、サーバのIPアドレスとポート番号を使ってソケットを作り、サーバとTCP通信をしているとします。
このとき、クライアントが動いて、アクセスポイントBに接続したとします(接続が自動で切り替わる)。
このような場合でも、サーバとクライアントのコネクションは保っていられるのでしょうか?
もしくは、このような場合でもコネクションを保つ方法はあるのでしょうか?
よろしくお願いします。
No.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 ライブラリの導入を検討するのが、一番簡単かと思います。
回答ありがとうございます。
屋内の場所に依存したゲームを作ってみたかったのでこのような質問をさせて頂きました。
アプリ層でクライアントを認識する仕組みを作れれば良さそうですね。Javaだけで完結させようと思っていましたが、他の方法を考えてみようと思います。
ありがとうございました。
No.1
- 回答日時:
>>このような場合でも、サーバとクライアントのコネクションは保っていられるのでしょうか?
もしくは、このような場合でもコネクションを保つ方法はあるのでしょうか?
これは、Javaがどうこうという問題ではなく、(処理内容としては、OS側に近いですし)「システムにどういうふうな機能を持たせたいか」という作り手の問題だと思います。
システムは、「人間がこうして欲しい」という意志を持っても、多くの場合、それを感じて動いてくれません。
マニュアル等でしっかりと書かれていることは、そのとおりに動作してくれると思いますが、記載されていないことは、どうなるかわかりません。
たぶん、記載されていないケースについては、自分でそういうケースの動作確認をして、ダメな場合は、その機能を(Javaだけで対応可能かどうか不明ですが)作りこむことになると思います。
回答ありがとうございます。
やはりJavaだけで完結できるか難しい問題なのですね。
屋内の場所に依存したゲームを作ってみたかったのでこのような質問をさせて頂きました。
もう少し他の仕組みを考えてみたいと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Wi-Fi・無線LAN wifi接続先が、普通のアクセスポイントかテザリングかを区別できている仕組みを教えてください 3 2022/11/07 11:41
- VPN 無料のwifiはなぜ危険性高い? VPN プライベートDNSモードにすれば安全? 2 2022/06/04 18:23
- 固定IP 楽天光が繋がらないまたは接続に時間が掛かる IPv4が邪魔してるので削除したい 2 2022/08/15 11:58
- その他(インターネット接続・インフラ) 一軒家のインターネット環境について質問です。 現在一軒家に住んでいますがWiFiの速度が遅く困ってお 3 2022/11/06 00:55
- その他(スマートフォン・携帯電話・VR) 5GとWiFiについて 6 2022/06/20 05:13
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- サーバー Googleドライブなどを使わずにテザリングAndroidでWindowsとファイル共有 1 2023/02/19 13:14
- ルーター・ネットワーク機器 AU光10G回線について 6 2022/07/25 00:12
- Wi-Fi・無線LAN Wi-Fiで上りだけ遅くなった。 2 2023/02/14 19:09
- Wi-Fi・無線LAN 無線アクセスポイントを設置すると無線LAN でネットワークをつくることができると思いますが、このとき 3 2022/06/04 08:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
ソケットのクローズについて
-
UDP通信する時に、相手にどうや...
-
WinSockでの通信プログラムがう...
-
エクセル VBA でのCOMポート...
-
recv関数でフリーズしてしまう
-
UDP通信(SNMP)したいが、うま...
-
UDPで受信終了の合図を出して受...
-
Winsockで接続待ちタイムアウト...
-
JavaでBASIC認証突破
-
クライアントソケットMACアドレ...
-
UDP通信におけるbind関数について
-
winsockでファイル転送
-
VB6のwinsockでconnectできない
-
UDPのソケットプログラミング
-
非ブロッキングソケットのrecv...
-
バインドと接続(BindException...
-
空きポートの取得方法
-
ソケット通信 同じポート番号...
-
ソケットのrecvの戻り値が0
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
エクセル VBA でのCOMポート...
-
UDP通信する時に、相手にどうや...
-
UDP通信におけるbind関数について
-
UdpClient 送信元のIPアドレ...
-
Winsockで接続待ちタイムアウト...
-
recv関数でフリーズしてしまう
-
ソケットのクローズについて
-
ソケットのrecvの戻り値が0
-
Socket通信の0バイト受信について
-
ソケット通信 同じポート番号...
-
相手のIPアドレスを取得する方法
-
ソケットでクライアントのipア...
-
VB6のwinsockでconnectできない
-
Connectエラーが出てしまう・・...
-
ソケット通信の送受信遅延-02 ...
-
同じLAN内パソコンのIPアドレス...
-
WinSockでの通信プログラムがう...
-
UDPのソケットプログラミング
-
非ブロッキングソケットのrecv...
おすすめ情報