【发布时间】:2017-03-01 06:03:34
【问题描述】:
所以,我正在用 C 语言创建一个使用 UDP 的服务器,并且我想监听来自许多来源的传入数据包。因此,当我调用ssize_t recvfrom(int, void *, size_t, int, struct sockaddr * __restrict, socklen_t * __restrict)时,第5个参数,即包含发送者信息的参数可能会有所不同。
有没有办法在不知道每个客户端地址信息的情况下接收数据包?而且,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),它就可以正常工作。
标签: c sockets network-programming udp recvfrom