我有一个使用UDP进行通信的广播频道,它可以正常工作。但是有时候我想发送私人消息,而我的套接字处于广播模式下。我知道那些我想私聊的人的IP地址,因此我想知道是否有一种方式可以使用正确的IP地址而不是广播方式来发送消息,而且最好不用创建一个新的套接字。
struct addrinfo *res = nullptr, *it;
struct addrinfo hints;
memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_DGRAM;
getaddrinfo(ip_address.c_str(), port.c_str(), &hints, &res);
for (it = res; it != NULL; it = it->ai_next) {
socket_ = socket(it->ai_family, it->ai_socktype, it->ai_protocol);
sockaddr_ = it->ai_addr;
socklen_ = it->ai_addrlen;
break;
}
int enable = 1;
setsockopt(socket_, SOL_SOCKET, SO_BROADCAST, &enable, sizeof(int));
然后,我要发送广播消息,我这样做:
sendto(socket_, message, len, 0, sockaddr_, socklen_);
那么我应该更改sockaddr吗? 请帮帮我 :)
[编辑] 目前我决定使用我想要交谈的人的IP地址+端口创建一个新的socket,但这非常“沉重”,而且根本没有优化(我认为)。