我没有任何c编程方面的经验,而且我有点困难,我必须创建一个udp套接字并将其与单播IP地址和短暂端口绑定。我只知道如何创建一个udp套接字,我不知道如何继续。任何帮助,链接将不胜感激。谢谢!
我搜索了互联网,发现我们可以使用get_ifi_info函数获取接口列表,但是我们如何找出哪个是单播ip?
答案 0 :(得分:2)
您可以使用bind()
函数执行此操作:
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
第一个参数是套接字的文件描述符。第二个是指向套接字地址结构的指针,该结构包含(用于IPv4或IPv6)要绑定的IP地址和端口。第三个是第二个参数指向的结构的大小。
例如:
int s = socket(AF_INET, SOCK_DGRAM, 0); // AF_INET is for IPv4
if (s == -1) {
perror("socket failed");
exit(1);
}
struct sockaddr_in sin; // socket address structure specific to IPv4
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = inet_addr("192.168.1.2"); // binds to the local address 192.168.1.2
sin.sin_port = 0; // 0 means the OS picks the port
if (bind(s, (struct sockaddr *)&sin, sizeof(sin)) == -1) {
perror("bind failed");
exit(1);
}
printf("bind succeeded\n");
如果您需要了解实际选择的端口,则可以使用getsockname()
功能:
struct sockaddr_in sin; // socket address structure specific to IPv4
socklen_t sinlen = sizeof(sin);
memset(&sin, 0, sizeof(sin));
if (getsockname(s, (struct sockaddr *)&sin, &sinlen) == -1) {
perror("getsockname failed");
exit(1);
}
printf("bound to port %hu\n", ntohs(sin.sin_port));