0

我正在使用 Windows 的 Winsock2 API 开发游戏服务器,直到现在将其移植到 Linux。

我发现的主要问题是我不知道如何区分来自同一路由器/网络的游戏客户端。假设 2 个在同一网络中的游戏玩家通过相同的路由器 IP 和端口访问 Internet,例如 IP 220.100.100.100 和端口 5000,我的 C/C++ 服务器如何区分两个 TCP 连接并知道它们是两个不同的玩家吗?

当 accept(...) 返回时,我可以在返回套接字的 sockaddr_in 结构中找到任何区别吗?

4

2 回答 2

1

如果两个客户端(游戏玩家)位于路由器后面,则仅使用套接字很难区分它们。

如果您使用的是 TCP,那么它应该不是问题。每个客户端都通过一个唯一的套接字连接,因此您知道该套接字上的任何内容都来自它们。当他们第一次登录时,我假设他们提供了一些凭据(名称、密码),因此只需将凭据与套接字相关联。

如果您使用的是无连接协议,例如 UDP,他们第一次联系您时,您会给他们一个唯一的号码或令牌。下次他们联系您时,他们必须在消息中包含他们的令牌,以便您识别他们。

我错过了什么吗?

于 2012-05-31T17:08:05.270 回答
0

您不能通过测试调用 socket() 的套接字描述符来区分吗?回报?

于 2012-05-31T16:40:30.687 回答