私のゲームとサーバーの仕組みは次のとおりです。
私が作成した形式でエンコードされたメッセージを送信します。'p' で始まり、その後にメッセージ長の整数、次にメッセージが続きます。
例: p3m15 メッセージの長さは 3 バイトです。これはメッセージ 15 に対応します。その後、メッセージが解析されます。
これは、TCP が 1 バイトのみを送信する可能性があるように設計されています (TCP は最小 8 ビットのみを送信する必要があるため)。
私が作成したこのメッセージ プロトコルは非常に軽量で、うまく機能するため、JSON や他のプロトコルよりも使用しています。
私の主な関心事は、クライアントとサーバーがどのように話し始めるべきかということです。
サーバーは、クライアントが私の形式でメッセージを送信することを期待しています。ゲームは常にこれを行います。
私が遭遇した問題は、ポート 1720 でサーバーをテストしたときに発生しました。BitTorrent トラフィックがあり、サーバーがそれを拾っていました。これにより、あらゆる種類のランダムな「クライアント」がサーバーに接続され、ランダムなガベージが送信されていました。
これを「解決」するために、クライアントが最初に送信する必要があるのは文字列「Hello Server」になるようにしました。
送信された最初のバイトが != 'H' である場合、または 12 バイトを超える送信があり、それが != "Hello Server" である場合は、すぐに切断します。
これはうまく機能しています。少し素朴なことをしているのか、それとももっと標準的な対処方法があるのか 疑問に思っています:
- サーバーとの通信を開始するクライアント - クライアントは Hello サーバー チェックに合格しますが、途中で無効なメッセージが表示されます。アプリが無効なメッセージを送信することはないと想定できます。もしそうなら、それはバグでしょう。現在、無効なメッセージを検出した場合は、クライアントを切断します。
BitTorrent が各メッセージの前に「!!BitTorrent Protocol」を送信していることに気付きました。私はそのようなことをすべきですか?
これに関するアドバイスと、より安全で安全なものにすることは非常に役立ちます。ありがとう