因此,我创建了一个使用UDP的C服务器,并且我想监听来自多个源的传入数据包。因此,当我拨打ssize_t recvfrom(int, void *, size_t, int, struct sockaddr * __restrict, socklen_t * __restrict)
时,包含发件人信息的第5个参数可能会有所不同。为什么recvfrom关心数据来自谁
有没有办法在不知道每个客户的地址信息的情况下接收数据包?而且,这可能与C的图书馆?
这里是我的代码:
int file_descriptor;
char data[1024];
int bytes_recved;
sockaddr_in iDontKnow;
socklen_t addr_len = sizeof(iDontKnow);
if ((bytes_recved = recvfrom(file_descriptor, data, strlen(data), 0, (struct sockaddr*)&iDontKnow, &addr_len)) < 0) {
perror("Failed to receive data");
}
我注意到,接收与Java的DatagramSocket类和DatagramPacket类类数据时,DatagramSocket的的receive
功能在了DatagramPacket类类型的参数。但是,此DatagramPacket仅包含放置数据的对象。那么,为什么C的UDP接收实现要求你知道发送者的信息?
您显示的代码在不知道个人客户端地址信息的情况下接收数据包!你的代码不需要知道发件人的信息(你永远不会用任何东西填充'iDontKnow'),它会工作得很好。 –