我有一个广播频道,人们在UDP上谈论它及其工作,但是我想有时发送私人消息,但我的套接字在广播模式下?我有我想私下联系的人的情况。创建一个新的套接字是非常烦人的,所以我想有一种方法可以用好的in地址来发送消息,而不是在广播中。
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_);
我该换套餐吗?请帮助我:)
编辑暂时我决定创建一个新的套接字与Ipadress的人,我想,但它是非常“沉重”,并没有优化(我认为)
发布于 2021-11-03 08:21:37
sendto的参数告诉它要发送的地址和要发送到广播地址的地址。
如果在连接模式(SOCK_STREAM,SOCK_SEQPACKET)套接字上使用sendto(),则忽略参数dest_addr和addrlen (并且错误EISCONN可能在它们不为NULL和0时返回),并且在套接字未实际连接时返回错误ENOTCONN。否则,目标的地址由dest_addr指定,addrlen指定其大小。对于sendmsg(),目标地址由msg.msg_name提供,msg.msg_namelen指定其大小.
https://stackoverflow.com/questions/67087896
复制相似问题