ネットワークゲームのように(PC 1で)実行され、WiFi(アドホックなので非常に信頼性が高い)を介して別のコンピューター(2)からかなり定期的な間隔(40msなど)でデータパケットを受信するGUIを備えたC++アプリケーションがあります。 、プログラム(2)のループごとに1回。send/readを使用します。
問題は次のとおりです
。-パケットが常に完全に送信されるとは限りません(ただし、すべてが送信されるまで残りのデータを保持できるようです。これsend()
でうまくいきます)
-さらに重要なことに、パケットは(1)のループ中にソケットにスタックされます。発生するまで、read()
その後、データの大きなストリーム内のパケットを区別する方法、またはすでにパケットの途中にいたかどうかを知る方法はありません。
私はこれをIDヘッダーで修正しようとしました(最初のバイトとしてIDを見つけ、パケットの長さを知っています)が、私はしばしば迷子になり(不明なID:パケットの先頭にありません)、無視することを余儀なくされます残りのすべてのデータ。
だから私の質問は:
なぜパケットはスタックするのですか?(通常、私は400Bのデータを持っていますが、私のパケットは100B未満の長さであり、fps(1)と(2)はそれほど違いはありません)
実際のパケットを受信するためのより信頼性の高い方法、たとえば、パケットの80%(パケットを破棄する)を作成するにはどうすればよいですか?損失、それはUDP / TCPの問題ではありません)?
パケットを受信するための別のスレッドは機能しますか?((1)、サーバー上)
リアルタイムネットワークゲームはどのようにそれを実現しますか(複数のクライアント管理を含む)?
前もって感謝します。
(申し訳ありませんが、ここにコードはありませんが、できるだけ明確にしようとしました)