免费注册 查看新帖 |

Chinaunix

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

请教一个广播发送问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-11 11:03 |只看该作者 |倒序浏览
这是一个收发广播的守护进程,主机ip为192.168.0.10,对方ip为192.168.0.20/192.168.1.20。对方对指定端口广播,守护进程收到后广播相应数据。
当0.10通过pppoe拨号联网后,可以接受到广播,但送出的广播不能被对方收到。因鄙人技术浅薄,故对此现象束手无策。该问题如何解决?请诸位不吝赐教。万分感谢。代码如下。
void udp_serv()
{
    int            sockfd;
    struct sockaddr_in     servaddr, cliaddr;
    int yes=1;

    if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
    {
    fprintf(fp, "socket error.\n");
    exit(-1);
    }

    bzero(&servaddr, sizeof(struct sockaddr_in));
    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    servaddr.sin_port = htons(BIND_PORT);

    setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &yes, sizeof(yes));

    if(bind(sockfd, (struct sockaddr *)&servaddr,sizeof(servaddr)) < 0)
    {
    fprintf(fp, "bind error.\n");
    exit(-1);
    }

    int        lenrecv,lensend,buflen;
    socklen_t    len;
    char msgrecv[MAXLINE],accept[MAXLINE];
    char *mac = NULL;
    char *devname = NULL;
    char *reject = "Who Is It?";
    char *send = NULL;
    time_t now;

    for(;;)
    {
    if((lenrecv = recvfrom(sockfd, msgrecv, MAXLINE, 0, (struct sockaddr *)&cliaddr, &len)) < 0)
    {
        fprintf(fp, "recvfrom error.\n");
    }
    else
    {
        time(&now);
        fprintf(fp,"%srecv from [%s]: <%s>\n",ctime(&now),sock_ntop((struct sockaddr *)&cliaddr,len), msgrecv);   
    }

    if(strstr(msgrecv,"Where is xxxx?") != 0)
        send = accept;
    else
        send = reject;

    cliaddr.sin_addr.s_addr = htonl(INADDR_BROADCAST);

    mac = get_mac();
    devname = get_device_name();
    bzero(msgrecv,MAXLINE);
    bzero(accept,MAXLINE);
    buflen = sprintf(accept,"xxxx is here!\n%s\n%s",mac,devname);
    free(devname);
    free(mac);

    if((lensend = sendto(sockfd, send, strlen(send),0,\
            (struct sockaddr *)&cliaddr, len)) != buflen)
        fprintf(fp,"sendto error.\n");

    fflush(fp);
    }
}




另附pppoe前后route的变化。
前:

[root@xxxx cgi-bin]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0
169.254.0.0     *               255.255.0.0     U     0      0        0 eth0
default         192.168.0.1     0.0.0.0         UG    0      0        0 eth0

后:

[root@qualvideo cgi-bin]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
61.149.144.1    *               255.255.255.255 UH    0      0        0 ppp0
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0
169.254.0.0     *               255.255.0.0     U     0      0        0 eth0
default         *               0.0.0.0         U     0      0        0 ppp0
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP