您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> VC/MFC >> 关于upd 广播 一个节点传送 多个节点接收 的问题 急在线等

关于upd 广播 一个节点传送 多个节点接收 的问题 急在线等

来源:网络整理     时间:2016/8/1 4:17:35     关键词:

关于网友提出的“ 关于upd 广播 一个节点传送 多个节点接收 的问题 急在线等”问题疑问,本网通过在网上对“ 关于upd 广播 一个节点传送 多个节点接收 的问题 急在线等”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 关于upd 广播 一个节点传送 多个节点接收 的问题 急在线等
描述:

udp广播的问题.我建立了一个server.然后2个client.第一次. 2个client 发送数据给server.server能收到数据.server收到数据后发送确认数据.2个client只有最后打开的那个client可以收到.为什么. 下面是代码.在线等.希望大家帮助一下.没写过这个方面东西.第一次写.找了个代码修改修改.不过现在有问题了.比较急.大家帮忙啊.在这里谢谢了.
//server
void Udp_server(void)
{
     SOCKET dvrp;
     sockaddr_in from_s,bind_s;
     WSADATA wsdata;
     BOOL optval;
     char buf[1024];
     WSAStartup(0x0202,&wsdata);
     optval=TRUE;
     int fromlength=sizeof(SOCKADDR);
     //parameter  for bind of socket
     bind_s.sin_family=AF_INET;
     bind_s.sin_addr.s_addr=0;
     bind_s.sin_port=htons(5050);
     //parameter for receive data
     from_s.sin_family=AF_INET;
     from_s.sin_addr.s_addr=INADDR_BROADCAST;
     from_s.sin_port=htons(5050);
    
     dvrp = socket(AF_INET,SOCK_DGRAM,0);
    
     //bind socket
     setsockopt(dvrp,SOL_SOCKET,SO_BROADCAST,(char FAR *)&optval,sizeof(optval));
     bind(dvrp,(sockaddr *)&bind_s,sizeof(sockaddr_in));
     //receive data from ohter node using broadcast
     recvfrom(dvrp,buf,1024,0,(struct sockaddr FAR *)&from_s,(int FAR *)&fromlength);
     //receive one time every 0.5 second
     Sleep(500);
     ZeroMemory(buf,1024);
     recvfrom(dvrp,buf,1024,0,(struct sockaddr FAR *)&from_s,(int FAR *)&fromlength);
     Sleep(500);
     ZeroMemory(buf,1024);
     
     Sleep(2000);
      int ret = sendto(dvrp,"return data",1024,0,(sockaddr*)&from_s,sizeof(from_s));
      if(ret==SOCKET_ERROR){
          cout<<><>
     }else{
          printf("Send  success!\n");
     }
}
//client
void Udp_Client(void)
{
     SOCKET dvrp_c;
     sockaddr_in addrto;
     WSADATA wsdata;
     char buf[1024];
    
     WSAStartup(0x0202,&wsdata);
    
     dvrp_c=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED);
    
     //set parameter of socket
     addrto.sin_family=AF_INET;
     addrto.sin_addr.s_addr=INADDR_BROADCAST;
     addrto.sin_port=htons(5050);
     bool opt=true;
    
     //set socket to communication
     setsockopt(dvrp_c,SOL_SOCKET,SO_BROADCAST,(char FAR *)&opt,sizeof(opt));
     int nlen=sizeof(addrto);
     Sleep(500);
     //send cost to server
     int ret = sendto(dvrp_c,"Data",1024,0,(sockaddr*)&addrto,nlen);
     //if error get error message
     if(ret==SOCKET_ERROR){
          cout<<><>
     }else{
          printf("Send success!\n");
     }
     
     while(1){
      Sleep(500);
          ret = recvfrom(dvrp_c,buf,1024,0,(struct sockaddr FAR *)&addrto,(int FAR *)&nlen);
          printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
          if(ret==SOCKET_ERROR){
               int aaa = WSAGetLastError();
               printf("System error message: %d\n", aaa);
          }else{
               printf("Receive success!\n");
          }
          printf("%s",buf);
          
          ZeroMemory(buf,1024);
     }
}


以上介绍了“ 关于upd 广播 一个节点传送 多个节点接收 的问题 急在线等”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3056673.html

相关图片

相关文章