【发布时间】:2021-07-09 06:37:57
【问题描述】:
我有一个广播频道,人们在 UDP 中谈论它并且它工作但是我有时想发送私人消息,但我的套接字处于广播模式?我有我想私下联系的人的 IP。创建一个新的套接字非常烦人,所以我想有一种方法可以用良好的 Ipaddress 发送消息,但不能在广播中发送。
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 吗?请帮助我:)
[编辑] 目前我决定用我想要通话 + 端口的人的 Ipadress 创建一个新套接字,但它非常“重”并且根本没有优化(我认为)
【问题讨论】:
-
您是否尝试使用不是广播地址的地址发送到?
-
@user253751 所以我应该改变我的结构 sockaddr_?问题是结构是 :struct sockaddr { u_short sa_family;字符 sa_data[14]; };
-
sendto 的一个参数告诉它要发送到哪个地址,对吧?并且您正在发送到广播地址?你想发送到不同的地址?更改该参数