0

今のところ、Linuxに移植するまではWindowsのWinsock2APIを使用してゲームサーバーを開発しています。

私が見つけた主な問題は、同じルーター/ネットワークから来るゲームクライアントを区別する方法がわからないことです。同じネットワーク内にいる2人のゲーマーが、同じルーターIPとポート(たとえば、IP 220.100.100.100とポート5000)を介してインターネットに接続していると想像してみてください。私のC / C ++サーバーはどのようにして両方のTCP接続を区別し、それらが2人の異なるゲーマーですか?

accept(...)が戻ったときにソケットを返すsockaddr_in構造体に違いを見つけることができますか?

4

2 に答える 2

1

2 つのクライアント (ゲーマー) がルーターの背後にある場合、ソケットだけを使用してそれらを区別することは困難です。

TCP を使用している場合は問題ありません。各クライアントは一意のソケットを介して接続するため、そのソケットに着信するものはすべてクライアントからのものであることがわかります。彼らが最初にログオンするとき、資格情報 (名前、パスワード) を提供すると思われるので、資格情報をソケットに関連付けるだけです。

UDP などのコネクションレス プロトコルを使用している場合は、最初に連絡があったときに、一意の番号またはトークンを渡します。次回彼らがあなたに連絡するとき、あなたが彼らを識別できるように、メッセージに彼らのトークンを含める必要があります。

何か不足していますか?

于 2012-05-31T17:08:05.270 に答える
0

socket(); への呼び出しであるソケット記述子をテストすることで区別できませんでした。戻り値?

于 2012-05-31T16:40:30.687 に答える