当前位置:  开发笔记 > 编程语言 > 正文

如何区分同一IP地址上的两个不同的UDP客户端?

如何解决《如何区分同一IP地址上的两个不同的UDP客户端?》经验,为你挑选了1个好方法。

我正在写一个UDP服务器,这对我来说是第一次; 我只做了一点TCP通信.而且我无法确定如何区分哪个用户是哪个,因为UDP只处理数据包而不是连接,因此我无法确切地告诉我与谁通信.

这是我当前服务器循环的伪代码:

DatagramPacket p;
socket.receive(p); // now p contains the user's IP and port, and the data
int key = getKey(p);
if(key == 0) { // connection request
    key = makeKey(p);
    clients.add(key, p.ip);
    send(p.ip, p.port, key); // give the user his key
} else { // user has a key
    // verify key belongs to that IP address
    // lookup the user's session data based on the key
    // react to the packet in the context of the session
}

在设计时,我牢记这些要点:

由于存在路由器,多个用户可能存在于同一IP地址上,因此用户必须具有单独的标识密钥.

数据包可能是欺骗性的,因此应根据其原始IP地址检查密钥,如果其他IP尝试使用密钥,则忽略该密钥.

客户端的出站端口可能会在数据包之间发生变化.

第三个假设是正确的,还是我可以简单地假设一个用户=一个IP +端口组合?这是常见的,还是应该继续创建一个像我目前正在做的特殊键?

我不完全清楚TCP如何协商连接,所以如果你认为我应该用TCP建模它,那么请把我链接到一个好的教程或TCP的SYN/SYNACK/ACK混乱.

另请注意,如果IP发送0并且该IP已有挂起密钥,我确实有重新发送密钥的规定; 我省略了它以保持代码片段简单.我知道UDP不能保证到达,我计划稍后为主数据包处理代码增加可靠性.



1> Marcelo Cant..:

UDP数据包标头有一个源端口,通常用作应答端口.如果不使用,它应该为零,然后由更高级别的协议决定如何协调多个客户端的请求 - 响应活动.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有