如果我不用TCP/IP协议,而用用UDP的广播协议,用CSocket怎么做到的?是不是把数据流的形式设为SOCK_DGRAM,然后用sendto,在客户端用receivefrom就可以了。要不要连接呀什么的。有谁有这样的例子嘛?我的信箱[email protected](注:是减号,不是下划线)

解决方案 »

  1.   

    把local IP设为xxx.xxx.xxx.255, remote和local port设为不同的值
      

  2.   

    创建套接字:         
             int Sockfd;
    sockaddr_in hostip;
    Sockfd=socket(AF_INET,SOCK_DGRAM,0);
    if(Sockfd==INVALID_SOCKET){
    AfxMessageBox("创建套接口失败!");
    }
    hostip.sin_family=AF_INET;
    hostip.sin_addr.s_addr=INADDR_ANY;
    hostip.sin_port=htons(12180);
    bool optval=TRUE;
    setsockopt(Sockfd,SOL_SOCKET,SO_REUSEADDR,(char FAR *)&optval,sizeof(optval));
    if(bind(Sockfd,(struct sockaddr *)&hostip,sizeof(hostip))==SOCKET_ERROR){
    AfxMessageBox("主机绑定错误!");
    }
    if(setsockopt(Sockfd,SOL_SOCKET,SO_BROADCAST,(char FAR *)&optval,sizeof(optval))==SOCKET_ERROR){
    AfxMessageBox("广播通信设置产生错误!");
    }
    发送消息:
             sockaddr_in destip;
    int state;
    destip.sin_family=AF_INET;
    destip.sin_addr.s_addr=INADDR_BROADCAST;
    destip.sin_port=htons(12181);
    if(state=sendto(sock,(char *)buffer,buffersize,0,(struct sockaddr *)&destip,sizeof(destip))==SOCKET_ERROR){
    AfxMessageBox("数据发送失败");
    }
    接收消息:
    int state;
             sockaddr *sa;
             int salen;
             char buffer[15];
             int buffersize;
             buffersize=15;
    if(state=recvfrom(sock,(char *)buffer,buffersize,0,sa,&salen)==SOCKET_ERROR){
    AfxMessageBox("数据接收失败");
    }
    关闭套接字:
    closesocket(sock);