0

Unity3D を使用して iOS で Raknet の最新バージョンを実行すると、奇妙な問題が発生しCONNECTION_ATTEMPT_FAILEDます。サーバーに接続しようとすると発生します。

それでは、問題の詳細を説明しましょう。

ObjectiveC アプリケーションで使用するとまったく同じライブラリが正常に接続されるため、問題は Unity3D に関連しているようです。

問題が Raknet の信頼性レイヤーにあることを特定することができました。

どうやら、接続プロセスの最後のステップ (接続ハンドシェイクが完了したとき) で、サーバーの信頼性レイヤーは ID_CONNECTION_REQUEST、クライアントから受信したパケットがメッセージではなく確認応答であると考えています。したがって、それは答えません。最終的に、数回の試行 (および 10 秒のタイムアウト) の後、クライアントはCONNECTION_ATTEMPT_FAILEDエラーで失敗します。

誰かがアイデアとしてそこにいますか?より多くの情報を得ることができたら、質問を更新します。

アップデート

Unity3D 5.1.1f1 を使用しています

回避策を見つけることができました!詳細については、回答を参照してください。回避策は実際に何が起こったのかについて多くを教えてくれないので、ここにいる C++/XCode/Unity/iOS/AppleLLVM6.1 の専門家が実際に何が起こったのかを説明してくれることを嬉しく思います。

4

1 に答える 1

0

問題は、Raknet ヘッダーが iOS クライアントによって適切に生成されなかったことです。simpleつまり、パケットの代わりに ACK メッセージを送信していました。メッセージの残りの部分はサーバーによってガベージと見なされ、パケットは破棄されました。クライアントは、タイムアウトする前に、破損したハンドシェイク パケットの送信を数回試行し続けました。

これでは理由がわかりませんよね?Unity (iOS) で Raknet を実行しているときにserialize、クラスのメソッドが呼び出されていなかったようです。DatagramHeaderFormatこのメソッドの代わりに別の何か (そして私にはわかりません) がリンクされBitStream、破損したヘッダーで埋められていました。

printf内部からの呼び出しがコンソールに表示されなかったため、serialize メソッドが呼び出されなかったと確信しています。

に名前を変更DatagramHeaderFormat::serializeDatagramHeaderFormat::serializeHeader て...出来上がり、動作します。

ここで、コンパイラが何をしたか (およびその理由) だけを理解したいと思います。

于 2015-07-23T14:32:06.977 に答える