UDP处理多个客户端

时间:2011-11-22 17:17:22

标签: c++ networking udp

我似乎无法弄清楚如何为我的UDP服务器执行下一步。到目前为止,一个客户端连接,然后它来回发送数据,但当另一个客户端连接服务器时,将从新客户端获取数据并将其发送给另一个客户端。

我将检查已收到的消息是否来自新客户端,如果是,则为该客户端提供服务器用于进行某些处理的标识符。这是正确的方法吗?如果是这样你怎么做?我知道recvfrom来自" sockaddr *来自"我假设用客户端的数据填充该字段的字段但是如何使用该数据?

由于

3 个答案:

答案 0 :(得分:1)

UDP是无连接的。尝试使用TCP。你为什么决定使用UDP?你的约束是什么?

答案 1 :(得分:1)

sockaddr_in saddr;
int length = sizeof(saddr);
int read = recvfrom(your_socket, buff, 4096, 0, (sockaddr*)&saddr, &length);
if(read != -1) {
   // now saddr contains the address of the client
   // the g_addr is a previously captured client address
   if(saddr.sin_addr.S_un.S_addr = g_addr.sin_addr.S_un.S_addr) {
      // returning client?
   } else {
      // not yet seen client, so store address
   }
}

答案 2 :(得分:0)

recvfrom函数中的地址将填充来自客户端的源信息。在udp的情况下,它会给你地址和端口,这对于IPv4来说很容易转换为long long并存储为标识符。 IPv4是4个字节+端口2个字节。您需要将指针强制转换为sockaddr_in,然后获取sin_port和sin_addr的值。