我正在使用Windows的Winsock2 API开发游戏服务器,暂时将其移植到Linux。
我发现的主要问题是我不知道如何区分来自同一路由器/网络的游戏客户端。假设同一网络中的2个玩家通过相同的路由器IP和端口上网,例如IP 220.100.100.100和端口5000,我的C / C ++服务器如何区分两个TCP连接并知道它们是两个不同的游戏玩家?
在accept(...)返回时,我可以在sockaddr_in结构中找到返回套接字的任何区别吗?
答案 0 :(得分:1)
如果两个客户端(游戏玩家)都在路由器后面,那么很难仅使用套接字来区分它们。
如果您使用TCP,那么它应该不是问题。每个客户端通过一个唯一的套接字连接,因此您知道该套接字上的任何内容都来自它们。当他们第一次登录时,我假设他们提供了一些凭据(名称,密码),所以只需将凭证与套接字关联。
如果您使用无连接协议(如UDP),则在他们第一次与您联系时,您会为他们提供唯一的号码或令牌。下次他们与您联系时,他们必须在邮件中包含他们的令牌,以便您可以识别它们。
我错过了什么吗?
答案 1 :(得分:0)
无法通过测试套接字描述符来区分对socket()的调用;返回?