1

要約は次のとおりです。サーバーから同じコンピューターで実行されているクライアントにパケットを送信します。何らかの理由で、送信されたパケットが受信されたパケットと同じではありません。

詳細は次のとおりです。

パケットは、呼び出し関数でRakNetを使用して送信されました。

rakPeer->Send(&bitStream, MEDIUM_PRIORITY, RELIABLE_ORDERED, 0, UNASSIGNED_RAKNET_GUID, true);

サーバーから送信されたパケットの最初の 10 バイトは次のとおりです: 27,50,39,133,202,135,0,0,0,99 ... さらに 1180 バイト

以下は、受信側クライアントから見たパケットの最初の 10 バイトです (注: 50% の確率で正しく、残りの半分はこれです): 27,50,43,40,247,134,255,255,255,99 ... さらに 1180 バイト

最初のバイトはID_TIMESTAMP. バイト 2 ~ 5 にはタイム スタンプが含まれており、これはRakNetがなんらかの形で混乱していると推測されます。バイト 6 は、明らかに変更されたパック ID と、それに続く 3 バイトです。

私の疑いでは、小さなパケットは検出可能なエラーなしで送信されるように見えるため、エラーはパケットの長さが原因であると考えられますが、RakNetはパケットの破損を自動的に処理し、パケットが大きすぎる場合は内部で分割することを理解しています。

どんな助けでも大歓迎です。

4

1 に答える 1

0

同じ問題を抱えている人にとっては、ここに解決策があります。

RakNet タイム スタンプは、ビルド構成に応じて 32 ビットまたは 64 ビットです。この場合、64 ビット ビルドを使用して 32 ビット タイムスタンプを送信していました。RakNet はタイムスタンプであると考えるビットを変更して、コンピューター間の相対時間を説明するため、これは許されません。

于 2016-03-24T15:00:33.490 に答える