免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2764 | 回复: 2
打印 上一主题 下一主题

[C] 网络编程udp客户端如何绑定特定网卡 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-12-31 09:46 |只看该作者 |倒序浏览

我的环境是这样的,udp服务端,给很多客户端发广播包,一个设备可以开几个客户端,每个客户端只接受指定网卡的信息。
就是客户端要绑定网卡。原先的udp客户端我知道可以绑定特定地址,但我的客户端也是个dhcp客户端,经常改变地址,怎么才能绑定网卡口而不是地址呢
现在的客户端代码如下:
        /* 创建socket */
        if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
                perror("Create Socket Failed");
                exit(1);
        }
        if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1) {
                perror("Setsockopt Error");
                exit(1);
        }
        server_addr.sin_family = AF_INET;
        server_addr.sin_addr.s_addr = htonl(INADDR_ANY);              /*应该经常改变地址,地址也可能为0,这里不好直接获取地址来绑定*/
        server_addr.sin_port = htons(DHCP_PORT);
        /* 绑定套接口 */
        if (bind(sockfd, (struct sockaddr*) &server_addr,sizeof(server_addr)) == -1) {
                perror("Server Bind Failed");
                exit(1);
        }
       /*接受包*/
        while (1) {
                if (recvmsg(sockfd, &msg, 0) == -1) {
                        perror("Recv Error");
                        continue;
                }
                if (dhcp.option == htonl(DHCP_OPTION)) {
                        if ((int) dhcpcpid != 0) {
                                kill(dhcpcpid, SIGUSR1);
                        }
                }
        }

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2015-12-31 10:04 |只看该作者
用getifaddrs可取所有网卡的IP等信息

论坛徽章:
0
3 [报告]
发表于 2015-12-31 10:08 |只看该作者
本帖最后由 linrspock 于 2015-12-31 10:35 编辑

回复 2# hellioncu


    但是我这个其实接受的就是dhcp广播包,在后台一直监听,然后获取到特定广播包后做一些东西,在监听期间客户端的地址有可能变化了,重置了,变0了都有可能,不好绑定地址把,能不能指定网卡啊。
    sockaddr_ll这个结构体可以接口,但是我看到这个都是用在原始套接字,不知的能不能用在udp套接字上
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP