//****************************    绑定    if (WSAStartup(MAKEWORD(2, 2), &WSAData) != 0)
    {
       SendMessage(Application->MainForm->Handle,WM_FINDSERVERERROR,0,0);
       return ;
    }
    if ((sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET)
    {
       SendMessage(Application->MainForm->Handle,WM_FINDSERVERERROR,0,0);
       return ;
    }
    memset(&addr_in,'\0',sizeof(addr_in));
    addr_in.sin_family  = AF_INET;
    addr_in.sin_addr.s_addr = htonl(INADDR_ANY);//inet_addr(switchip.c_str());    addr_in.sin_port    = htons(3848);//端口绑定    if (bind(sock, (PSOCKADDR)&addr_in, sizeof(addr_in)) == SOCKET_ERROR)
    {
       Sleep(300);
       SendMessage(Application->MainForm->Handle,WM_NOTFINDSWITCH,0,sock);
       IsError = true;
       return ;
    }//  接收 ********************************    FD_ZERO(&myfdset);
    FD_SET(sock, &myfdset);
    sendto(sock,sendbuf,sendlen,0,(struct sockaddr *)&ser,clilen);
    int sendrevt = select(sock + 1, &myfdset, NULL, NULL, NULL);
   如果我绑定5000一下的端口,我就能select到数据;
   可是如果我绑定一个5000以上的端口(绑定是成功的),我就无法select到数据;   这是为什么啊??

解决方案 »

  1.   

    不会吧?用netstat看看端口的使用情况,看看有没有冲突
      

  2.   


    绑定是成功了,就是灭有办法读到数据
    select总是堵塞的;netstat都查看到我的端口绑定成功了;5000端口开始就不能获取到数据,1025-4999的端口,就都能;
      

  3.   

    你接收的数据从那来的呢?是不是因为你机器上没有使用5000以上UDP端口发送的数据,所以才收不到?
      

  4.   

    有服务端把数据发送到我的  23567端口,我就开了个SOCK来监听23567(bind成功了,用netstat看到了);
    发送和接收都是 UDP 的,发送的数据到达了以太层了,我用sniffer都抓到了;
    可是我用select 就是得不到数据;我查看了一些资料,
    当  addr_in.sin_port  = 0; 的时候,系统会给sin_port分配一个1024-5000之间的端口;但是却没有看到有资料说,UDP不能绑定5000以上的端口;真的奇怪啊;
      

  5.   

    htonl(INADDR_ANY);//
    UDP的IP为?
      

  6.   

    UDP的服务端发送了目的端口死 23567 的包我用SNIFFER抓到了可是,select读取不到BIND也成功怎么想怎么晕这个问题是否和 同步、异步的设置有关?