如何使用recvfrom侦听来自特定主机的UDP数据报?

如何使用recvfrom侦听来自特定主机的UDP数据报?,c,udp,C,Udp,我有一个C代码片段,可以监听UDP套接字以获取消息(它工作正常): 之后,我在发件人地址结构中获得了有关发件人的信息,我可以检查地址、端口等。我的问题是:我可以使用recv、recvfrom或其他类似功能来监听来自某个主机的数据报吗?换句话说,是否可以在不读取数据报的情况下删除来自其他源的数据报?如果使用数据报套接字,则可以“筛选”并从指定的单个源接收数据报 如果socket sockfd的类型为SOCK_DGRAM,则addr是指向的地址 默认情况下发送哪些数据报,,以及从中发送的唯一地址 接

我有一个C代码片段,可以监听UDP套接字以获取消息(它工作正常):

之后,我在发件人地址结构中获得了有关发件人的信息,我可以检查地址、端口等。我的问题是:我可以使用
recv
recvfrom
或其他类似功能来监听来自某个主机的数据报吗?换句话说,是否可以在不读取数据报的情况下删除来自其他源的数据报?

如果使用数据报套接字,则可以“筛选”并从指定的单个源接收数据报

如果socket sockfd的类型为
SOCK_DGRAM
,则addr是指向的地址 默认情况下发送哪些数据报,,以及从中发送的唯一地址 接收到数据报

有点不同:

对于
SOCK_DGRAM
sockets,对等地址标识所有 数据报通过后续的
send()
函数发送,并限制 后续
recv()函数的远程发送器


在调用
recvfrom
之前,您忘记填写
sender\u len
。我是
connect
而不是
bind
-ing,还是在它之后?@WojciechPtak在
bind
ing之后再做。
uint32_t udp_port = 101010; // example port
int sock_udp = socket(AF_INET, SOCK_DGRAM, 0);
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
server_address.sin_port = htons(udp_port);
bind(sock_udp, (struct sockaddr*) &server_address, (socklen_t) sizeof(server_address));

char buffer[20];
struct sockaddr_in sender_address;
socklen_t sender_len = (socklen_t) sizeof(struct sockaddr_in);
ssize_t rcv_len = recvfrom(sock_udp, buffer, sizeof(buffer), 0, (struct sockaddr * ) &sender_address, &sender_len);