インターネット上での対戦ゲームの作成を行なっているところです。
サーバーを挟んでクライアント間で双方向の通信を行なっています。
A → サーバー → B
A ← サーバー ← B
TCP/IPは信頼性の高い通信方法ということで、データ抜けなどは
心配しなくても良いと聞いています。
もし、データ抜けなどが発生した場合はコネクションロストの状態になると。
実際のプログラミングではソケットを使用しています。
コネクションロストが起きると、ソケットエラーかソケットクローズで検知できます。
実際に例えばクライアントAを強制終了させるとサーバーはただちに
ソケットクローズを検知します。
ここで、問題はデータを送っても届かないのに、
ソケットエラーもソケットクローズも起きない状態が発生することです。
これはインターネットの経路上になにか問題が発生したと考えていますが
このような状態はタイムアウトなどで監視する以外に検知する方法はないのでしょうか?
クライアントはウィンドウズでVB6.0のwinsockを、
サーバーはLinuxを使用しています。
なにかアドバイスをいただければありがたいです。
No.1ベストアンサー
- 回答日時:
>>これはインターネットの経路上になにか問題が発生したと考えていますが
>>このような状態はタイムアウトなどで監視する以外に検知する方法はないのでしょうか?
多くのアプリは、タイムアウトで処理しているようです。例えば、経路途中のどこかのLANケーブルが抜けて通信が失敗した場合、すぐにエラーを検出して異常になるよりも、LANケーブルを差し込んだら、そのまま継続してくれるほうが嬉しいわけですからね。
もし、デフォルトのタイムアウトがいやなら、定期的に信号をやりとりする仕組みを組み込めばいいと思います。ただし、そのやりとり自体もタイムアウトになる可能性があるのと、連番を振って管理するなどしてエラー時の再送をやる場合、考慮無くやると、アホな結果を生む可能性もあるので、注意が必要です。このあたりの話題はソケット関係の情報を検索すると出てくると思います。
あまり厳密にやると複雑化する気もするので、シンプルにタイムアウトでの対処がいいかなと思います。
ありがとうございました。
>すぐにエラーを検出して異常になるよりも、LANケーブルを差し込んだら、そのまま継続してくれるほうが嬉しいわけですからね。
なぜ、すぐにタイムアウトにならないかと思っていたのですが、なるほどと思いました。
>考慮無くやると、アホな結果を生む可能性
実は今、こういう状況で作り直すところなのです。
それでご意見を伺ったしだいです。
参考になりました。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- サーバー Googleドライブなどを使わずにテザリングAndroidでWindowsとファイル共有 1 2023/02/19 13:14
- ネットワーク 社内ネットワークの1台だけ接続できないときがある 4 2023/01/25 11:58
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- サーバー 接続・ログインはできているのにメールが送信できない 2 2022/06/27 15:03
- Gmail SPFレコードとDNSサーバーについて、gmailを設定できるかどうか 2 2023/06/10 23:55
- その他(インターネット接続・インフラ) IPアドレスについて 2 2022/10/23 14:48
- バッテリー・充電器・電池 車用のスマホの充電器で自動でホルダーが開閉して スマホを固定して充電も行う便利な物があります。 知人 1 2023/06/04 18:31
- VPN VPNに接続すると、インターネットに接続できなくなります。 1 2022/06/19 22:51
- 車検・修理・メンテナンス シガーソケットが通電しなくなりヒューズを替えても直りません。原因は何ですか? 10 2022/09/22 11:03
- UNIX・Linux サーバー間のデータコピー(データ形式とデーターフォーマットの変換あり。一定間隔で処理) 2 2023/08/22 22:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
UDP通信(SNMP)したいが、うま...
-
Connectエラーが出てしまう・・...
-
TCP/IP通信でのコネクシ...
-
ソケットを用いた1対多通信につ...
-
非ブロッキングソケットのrecv...
-
UDP通信におけるbind関数について
-
UDP通信する時に、相手にどうや...
-
クライアントソケットMACアドレ...
-
Comboboxの選択値をパラメータ...
-
UDPで受信終了の合図を出して受...
-
割り込み処理について
-
ソケットのrecvの戻り値が0
-
ソケットのクローズについて
-
Winsockで接続待ちタイムアウト...
-
逆コンパイルと逆アセンブルの...
-
Macターミナルで実行中のプログ...
-
USJでの割り込み
-
これて逆じゃないですか?
-
C言語で、メモリを解放しないで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
recv関数でフリーズしてしまう
-
Winsockで接続待ちタイムアウト...
-
UDP通信におけるbind関数について
-
エクセル VBA でのCOMポート...
-
Socket通信の0バイト受信について
-
VB6のwinsockでconnectできない
-
ソケットのrecvの戻り値が0
-
ソケットを用いた1対多通信につ...
-
UdpClient 送信元のIPアドレ...
-
ソケットでクライアントのipア...
-
UDP通信する時に、相手にどうや...
-
ソケット通信 同じポート番号...
-
同じLAN内パソコンのIPアドレス...
-
Connectエラーが出てしまう・・...
-
ソケットのクローズについて
-
CreateFile関数でCOMポートが開...
-
異なる言語間でのソケット通信...
-
C言語でHTTP1.1のキープアライ...
-
送信したデータの一部が文字化...
おすすめ情報