多个客户端使用相同的IP

时间:2011-07-10 17:51:53

标签: network-programming udp

我在使用UDP和2个使用相同IP的客户端时遇到问题 - 在他们都登录后,其中一个获得了两个数据包。我该如何解决?

1 个答案:

答案 0 :(得分:0)

简短的回答是:不要绑定到UDP或TCP连接的会话发起方的特定端口。通过让操作系统为您分配端口(在bind()上的套接字地址结构中为INADDR_ANY和端口0),您可以在同一IP上拥有多个客户端。

对于非面向连接的对话(例如UDP),服务器仍然需要知道在哪里进行对话。为此,请检查recv()的手册页,它具有一个版本(recvfrom()),允许您将指针传递给套接字地址结构 - 该地址将填入客户端信息,因此可以立即使用发送数据包。因此,在服务器上,使用:

ssize_t
 recvfrom(int socket, void *restrict buffer, size_t length, int flags,
     struct sockaddr *restrict address,
     socklen_t *restrict address_len);

并且您将在sockaddr指针中传递发件人地址。