本帖最后由 VisualEleven 于 2011-05-06 17:00:08 编辑

解决方案 »

  1.   

    如果是阻塞模式 默认就是阻塞
    recvfrom会一直等待
    可以通过设置recv超时
    bool bOK=TRUE;
    if(setsockopt(sock,SOL_SOCKET,SO_RCVTIMEO,(LPSTR)bOK,sizeof(bOK))!=0)
    return ERROR;
      

  2.   

    本帖最后由 VisualEleven 于 2011-05-06 17:02:16 编辑
      

  3.   

    使用非阻塞的RECV或是开线程RECV
      

  4.   

         WSAData wsaData;
         if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
         return ;
         SOCKET s=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
         if(s==INVALID_SOCKET)
         return ;
         INT timeout=2000;
         if(setsockopt(s,SOL_SOCKET,SO_RCVTIMEO,(LPSTR)&timeout,sizeof(int))!=0)
         return ;
         SOCKADDR_IN addr;
         INT len=sizeof(addr);
         CHAR buf[128]="";     sockaddr_in local;
         local.sin_family=AF_INET;
         local.sin_addr.S_un.S_addr=inet_addr("192.168.1.101");
         local.sin_port=htons(4567);
         if(bind(s,(sockaddr*)&local,sizeof(local))==SOCKET_ERROR)
         return ;
         DWORD dwtime=GetTickCount();
         INT ret=recvfrom(s,buf,128,0,(sockaddr*)&addr,&len);
         if(ret==SOCKET_ERROR)
         ShowMessage(IntToStr(GetTickCount()-dwtime));
         closesocket(s);
         WSACleanup();
      

  5.   

    UDP服务器的宗旨就是不管哪发来的,只管收,一般不判断发送端的地址是否正确~你说的“地址的服务端”是个啥意思?服务器的地址?那就是本机地址啊,怎么可能不存在
    若是发送端地址的话,UDP服务器根本不判断发送端地址,怎么可能出这种错~
      

  6.   

    setsockopt(..., SO_RCVTIMEO, ..);设置超时值
      

  7.   


    其实是sendto然后返回的……我问得有点简略……