我似乎无法弄清楚如何为我的UDP服务器执行下一步。到目前为止,一个客户端连接,然后它来回发送数据,但当另一个客户端连接服务器时,将从新客户端获取数据并将其发送给另一个客户端。
我将检查已收到的消息是否来自新客户端,如果是,则为该客户端提供服务器用于进行某些处理的标识符。这是正确的方法吗?如果是这样你怎么做?我知道recvfrom来自" sockaddr *来自"我假设用客户端的数据填充该字段的字段但是如何使用该数据?
由于
答案 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的值。