static SOCKET sock[NUM] ;
....
switch (msg)
    {
    case IDOK://当用户按下OK键
          for(i=0;i<NUM;i++)
          { sock[i] = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP) ;
            WSAAsyncSelect (sock[send_num], hwnd, WM_SOCKET_NOTIFY+i,//use different message ID for each socket
                                  FD_WRITE&brvbar;FD_CONNECT&brvbar;FD_READ);
            connect(sock[send_num], (SOCKADDR *) &sa, sizeof (sa)) ;
          }
break;  
...    }  
if(msg>=WM_SOCKET_NOTIFY&&msg<WM_SOCKET_NOTIFY+NUM)
{
int index=msg-WM_SOCKET_NOTIFY;
          wEvent = WSAGETSELECTEVENT (lParam) ;  // ie, LOWORD
          wError = WSAGETSELECTERROR (lParam) ;  // ie, HIWORD          switch (wEvent)
          {
              case FD_CONNECT:
                  send(sock[index]
                  //这里知道是index=send_num
}

解决方案 »

  1.   

    遍历整个数组,用FD_ISSET()判断
      

  2.   

    还是好好看看 WSAAsyncSelect ()的用法吧,你的程序叫人看了没法回答!
      

  3.   

    to masterz:
       ok,that's fine.
      

  4.   

    ....
    static SOCKET sock[NUM] ;
    ....
    switch (msg)
        {
        case IDOK://当用户按下OK键
              for(i=0;i<NUM;i++)
              { sock[i] = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP) ;
                WSAAsyncSelect (sock[send_num], hwnd, WM_SOCKET_NOTIFY,
                                      FD_WRITE&brvbar;FD_CONNECT&brvbar;FD_READ);
                connect(sock[send_num], (SOCKADDR *) &sa, sizeof (sa)) ;
              }  
        case WM_SOCKET_NDTIFY:
              wEvent = WSAGETSELECTEVENT (lParam) ;  // ie, LOWORD
              wError = WSAGETSELECTERROR (lParam) ;  // ie, HIWORD          switch (wEvent)
              {
                  case FD_CONNECT:
                      send((SOCKET)wParam
                      //消息的字参数就是产生事件的socket
                          }