如何区分同一子网和不同IP /用户的sockaddr_in结构

时间:2012-05-31 16:33:29

标签: c++ c tcp winsock

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

如果您使用无连接协议(如UDP),则在他们第一次与您联系时,您会为他们提供唯一的号码或令牌。下次他们与您联系时,他们必须在邮件中包含他们的令牌,以便您可以识别它们。

我错过了什么吗?

答案 1 :(得分:0)

无法通过测试套接字描述符来区分对socket()的调用;返回?