您的位置:程序门 -> vc/mfc -> 网络编程



关于广播的


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于广播的
发表于:2007-09-21 22:06:03 楼主
很怪啊   我发一个消息一个机子,那个机子收到了,但是它给我发时,我却收不到。我们是在区域网的,默认网关是一样的。我的是广播技术。
//发送
  wsadata       wsadata;                                           //指向winsocket信息结构的指针      
                    socket       socklistener;      
                    sockaddr_in       sin,saudpserv;      
                    bool       fbroadcast=true;      
                    char       sendbuff[1024];      
                    int       nsize;      
                    int       ncount=0;      
                    if(wsastartup(makeword(2,2),&wsadata)!=0)//进行winsocket的初始化      
                    {      
                                    printf( "can 't       initiates       windows       socket!program       stop.\n ");//初始化失败返回-1      
                                    return       -1;      
                    }      
                    socklistener=socket(af_inet,sock_dgram,0);      
                    if(setsockopt(socklistener,sol_socket,so_broadcast,      
                                    (char       *)&fbroadcast,sizeof(bool))==socket_error)
    {

    printf( "broadcast   set   error   is   %d ",wsagetlasterror());
    wsacleanup();
    return   -1;
    }      
       
                    sin.sin_family=af_inet;      
                    sin.sin_port   =htons(5000);      
                    sin.sin_addr.s_addr   =   htonl(inaddr_any);      

                    if(bind(socklistener,   (sockaddr       *)&sin,   sizeof(sin))!=0)      
                    {      
                                    printf( "can 't       bind       socket       to       local       port!program       stop.\n ");//初始化失败返回-1      
                                    return       -1;      
                    }      
                    saudpserv.sin_family=af_inet;      
                    saudpserv.sin_addr.s_addr=htonl(inaddr_broadcast);      
                    saudpserv.sin_port=htons(7001);//发送用的端口,可以根据需要更改      

                    nsize=sizeof(sockaddr_in);      
                    while(ncount <15)      
                    {      
                                    sprintf(sendbuff, "message       %d ",ncount++);      
                                    sendto(socklistener,sendbuff,      
                                                    lstrlen(sendbuff),      
                                                    0,      
                                                    (sockaddr       *)       &saudpserv,      
                                                    sizeof(sockaddr_in));      
                                    printf( "%s\n ",sendbuff);      
 
    }
    getchar();


//接受
wsadata       wsadata;                                           //指向winsocket信息结构的指针      
                    socket       socklistener;      
                    sockaddr_in       sin,saclient;      
                    char       crecvbuff[1024];      
                    int       nsize,nbsize;      
                    int       iaddrlen=sizeof(saclient);      
                    if(wsastartup(makeword(2,2),&wsadata)!=0)//进行winsocket的初始化      
                    {      
                                    printf( "can 't       initiates       windows       socket!program       stop.\n ");//初始化失败返回-1      
                                    return       -1;      
                    }      
                    socklistener=socket(af_inet,   sock_dgram,0);      
                    sin.sin_family=af_inet;      
                    sin.sin_port=htons(7001);//发送端使用的发送端口,可以根据需要更改      
                    sin.sin_addr.s_addr   =htonl(inaddr_any);      
                    if(bind(socklistener,   (sockaddr       far       *)&sin,       sizeof(sin))!=0)      
                    {      
                                    printf( "can 't       bind       socket       to       local       port!program       stop.\n ");//初始化失败返回-1      
                                    return       -1;      
                    }      
                    while(1)      
                    {      
                                    nsize=sizeof(sockaddr_in);      
                                    if((nbsize=recvfrom(socklistener,crecvbuff,1024,0,      
                                                    (sockaddr       far       *)       &saclient,&nsize))==socket_error)      
                                    {      
                                                    printf( "recive       error ");      
                                                    break;      
                                    }      
                                    crecvbuff[nbsize]= '\0 ';  
    printf( "sender   ip:%s\n ",inet_ntoa(saclient.sin_addr));
                                    printf( "%s\n ",crecvbuff);      
                    }
发表于:2007-09-23 01:49:081楼 得分:0
子网掩码相同不?
发表于:2007-09-23 13:25:522楼 得分:0
把ip地址与子网掩码相与   (&)
比较收发的两台机器


快速检索

最新资讯
热门点击