⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 multitst.c

📁 windows 网络编程。pdf文档
💻 C
📖 第 1 页 / 共 3 页
字号:
      break;
    case WM_PAINT:
      UpdateWnd(hwnd);
      break;
    default:
      return (DefWindowProc(hwnd, msg, wParam, lParam));
  } /* end switch(msg) */
  
  return (0L);
} /* end MainWndProc() */

/*-----------------------------------------------------------
 * Function: BindDlgProc()
 *
 * Description: procedure for the bind() dialog box
 */
BOOL CALLBACK BindDlgProc (
  HWND hDlg,
  UINT msg,
  UINT wParam,
  LPARAM lParam)
{
  static HANDLE hwnd, hInst;
  static u_long lMultiAddr;
  int nRet;
  
  switch (msg) {
    case WM_INITDIALOG:
            
      /* get parameters passed */
      if (lParam) {        
        hInst = (HANDLE)LOWORD(lParam);
        hwnd  = (HANDLE)HIWORD(lParam);
      }
                                              
      /* set display values */
      SetDlgItemText (hDlg, IDC_SRCADDR, strSrcMulti);
      SetDlgItemInt  (hDlg, IDC_SRCPORT, nSrcPort, FALSE);
      SetFocus (GetDlgItem (hDlg, IDC_BIND));

      /* center dialog box */
      CenterWnd (hDlg, hwnd, TRUE);
      
      return FALSE;
        
    case WM_COMMAND:
      switch (wParam) {

        case IDCANCEL:        
        case IDOK:
          EndDialog (hDlg, TRUE);
          return TRUE;
                
        case IDC_BIND:
          nSrcPort = (u_short) GetDlgItemInt (hDlg, IDC_SRCPORT, NULL, FALSE);
          GetDlgItemText (hDlg, IDC_SRCADDR, strSrcMulti, 40);
          lMultiAddr = inet_addr(strSrcMulti);
          if (lMultiAddr == INADDR_NONE) {
            WSAErrMsg("inet_addr()");
          } else {
            /* init source address structure to port & address requested */
            stSrcAddr.sin_family = PF_INET;
            stSrcAddr.sin_port   = htons(nSrcPort);
            stSrcAddr.sin_addr.s_addr = lMultiAddr;

            /* call bind */
            nRet = bind (hSock, 
              (struct sockaddr FAR *)&stSrcAddr, 
              sizeof(struct sockaddr));
            if (nRet == SOCKET_ERROR) {
              WSAErrMsg ("bind()");
            }
          }
          return TRUE;
        } /* end switch(wParam) */
      return TRUE;
    } /* end switch(msg) */
    return FALSE;
} /* end BindDlgProc() */

/*-----------------------------------------------------------
 * Function: SendDlgProc()
 *
 * Description: procedure for the send() dialog box
 */
BOOL CALLBACK SendDlgProc (
  HWND hDlg,
  UINT msg,
  UINT wParam,
  LPARAM lParam)
{
  static int net, nDataLen;
  static HANDLE hwnd, hInst;
  static u_long lMultiAddr;
  int nRet;
  
   switch (msg) {
      case WM_INITDIALOG:
            
      /* get parameters passed */
      if (lParam) {        
        hInst = (HANDLE)LOWORD(lParam);
        hwnd  = (HANDLE)HIWORD(lParam);
      }
                                              
      /* set display values */
      lstrcpy (achOutBuf, "Testing Multicast 1-2-3 (cha-cha-cha)");
      SetDlgItemText (hDlg, IDC_DESTADDR, strDestMulti);
      SetDlgItemText (hDlg, IDC_DATAOUT, achOutBuf);
      SetDlgItemInt  (hDlg, IDT_FPORT, nDestPort, FALSE);
    
      SetFocus (GetDlgItem (hDlg, IDC_SENDTO));

      /* center dialog box */
      CenterWnd (hDlg, hwnd, TRUE);
      
      return FALSE;
        
    case WM_COMMAND:
        switch (wParam) {

        case IDCANCEL:        
            case IDOK:
                EndDialog (hDlg, TRUE);
                return TRUE;
                
            case IDC_DATAOUT:
            case IDC_DESTADDR:
              break;
            case IDC_SENDTO:
              nDestPort = (u_short) GetDlgItemInt (hDlg, IDT_FPORT, NULL, FALSE);
              GetDlgItemText (hDlg, IDC_DATAOUT, achOutBuf, 1024);
              GetDlgItemText (hDlg, IDC_DESTADDR, strDestMulti, 40);
              lMultiAddr = inet_addr(strDestMulti);
              if (lMultiAddr == INADDR_NONE) {
                WSAErrMsg("inet_addr()");
              } else {
            /* init destination address structure */
            stDestAddr.sin_family = PF_INET;
            stDestAddr.sin_port   = htons (nDestPort);
            _fmemcpy ((char FAR *)&(stDestAddr.sin_addr), 
              (char FAR *)&lMultiAddr, 4);
                      /* sendto() */
            nRet = sendto (hSock, (char FAR *)achOutBuf, lstrlen(achOutBuf), 0,
                     (struct sockaddr FAR *) &stDestAddr, sizeof(struct sockaddr));
            if (nRet == SOCKET_ERROR) {
              WSAErrMsg ("sendto()");
            }
            return (FALSE);
              }
              break;
            case IDC_CONNECT:
              nDestPort = (u_short) GetDlgItemInt (hDlg, IDT_FPORT, NULL, FALSE);
              GetDlgItemText (hDlg, IDC_DESTADDR, strDestMulti, 40);
              lMultiAddr = inet_addr(strDestMulti);
              if (lMultiAddr == INADDR_NONE) {
                WSAErrMsg("inet_addr()");
              } else {
            /* init destination address structure */
            stDestAddr.sin_family = PF_INET;
            stDestAddr.sin_port   = htons (nDestPort);
            _fmemcpy ((char FAR *)&(stDestAddr.sin_addr), 
              (char FAR *)&lMultiAddr, 4);
                      /* connect */
            nRet = connect (hSock, 
                (struct sockaddr FAR *) &stDestAddr, 
                sizeof(struct sockaddr));
            if (nRet == SOCKET_ERROR) {
              WSAErrMsg ("connect()");
            }
            return (FALSE);
              }
            case IDC_SEND:
              GetDlgItemText (hDlg, IDC_DATAOUT, achOutBuf, MCBUFSIZE);
              nRet = send (hSock, (char FAR *)achOutBuf, lstrlen(achOutBuf), 0);
              if (nRet == SOCKET_ERROR) {
                WSAErrMsg ("send()");
              }
           return (FALSE);
        }
    return TRUE;
    }        
    return FALSE;
} /* end SendDlgProc() */

/*-----------------------------------------------------------
 * Function: OptionDlgProc()
 *
 * Description: procedure for the setsockopt()/getsockopt()
 *  dialog box
 */
BOOL CALLBACK OptionDlgProc (
  HWND hDlg,
  UINT msg,
  UINT wParam,
  LPARAM lParam)
{
  static int nRet, nOptName, nOptVal, nOptLen, nOptIDC, nLevel;
  static char FAR *lpOptVal;
  static HANDLE hwnd, hInst;
  static struct ip_mreq stIpReq;
  char achMultiIntr[MAXHOSTNAME];
  u_long lMultiAddr, lMultiIntr;
  struct in_addr stInAddr;
    
    switch (msg) {
        case WM_INITDIALOG:
            
            /* get parameters passed */
        if (lParam) {        
          hInst = (HANDLE)LOWORD(lParam);
          hwnd  = (HANDLE)HIWORD(lParam);
        }
                                              
      /* set display values */
      SetDlgItemInt  (hDlg, IDT_SOCKIN, hSock, FALSE);
      SetDlgItemText (hDlg, IDT_LEVELIN, "0");
      SetDlgItemText (hDlg, IDT_MULTIADDR, inet_ntoa (stDestAddr.sin_addr));
      SetDlgItemInt  (hDlg, IDT_MULTIINTR, IPPROTO_IP, FALSE);
      SetDlgItemInt  (hDlg, IDT_OPTNAME, IP_ADD_MEMBERSHIP, FALSE);    
      SetDlgItemInt  (hDlg, IDT_OPTVAL, 0, FALSE);
      SetDlgItemInt  (hDlg, IDT_OPTLEN, sizeof(struct ip_mreq), FALSE);
      CheckDlgButton (hDlg, IDC_BSD_OPTNAMES, bBSD_OptNames); 
      
      nOptName = IP_ADD_MEMBERSHIP;
           nOptLen  = sizeof (struct ip_mreq);
      nLevel   = IPPROTO_IP;
      lpOptVal = (char FAR *)&stIpReq;
    
      SetFocus (GetDlgItem (hDlg, IDT_MULTIADDR));
      CheckRadioButton(hDlg, IDR_ADD, IDR_OTHER, IDR_ADD); 

      /* center dialog box */
      CenterWnd (hDlg, hwnd, TRUE);
      
      break;
        
    case WM_COMMAND:
        switch (wParam) {

        case IDCANCEL:        
            case IDOK:
                EndDialog (hDlg, TRUE);
                break;
                
            case IDB_GETSOCKOPT:
            
              /* Get the parameter values, and call getsockopt(), 
               *  then display the results! */
              if (nOptName == USER_PARAMETER_VALUES) {
                nLevel   = GetDlgItemInt(hDlg, IDT_LEVELIN, NULL, FALSE);
                nOptName = GetDlgItemInt(hDlg, IDT_OPTNAME, NULL, FALSE);
                nOptVal  = GetDlgItemInt(hDlg, IDT_OPTVAL,  NULL, FALSE);
                  nOptLen  = GetDlgItemInt(hDlg, IDT_OPTLEN,  NULL, FALSE);
              }
              nRet = getsockopt(hSock, 
                nLevel, 
                (bBSD_OptNames ? nOptName : nOptName-DEERING_OFFSET),
                        lpOptVal,  /* pointer set to right location earlier */
                (int FAR *)&nOptLen);
              if (nRet == SOCKET_ERROR) {
                WSAErrMsg("getsockopt()");
               } else {
                /* Display the results */
            switch (nOptName) {
              case IP_ADD_MEMBERSHIP:    /* fail with get */
              case IP_DROP_MEMBERSHIP:
                break;
              case IP_MULTICAST_LOOP:
               case IP_MULTICAST_TTL:
              case USER_PARAMETER_VALUES:
                SetDlgItemInt  (hDlg, IDT_OPTVAL, *lpOptVal, FALSE);
                break;
              case IP_MULTICAST_IF:
                SetDlgItemText (hDlg, IDT_MULTIINTR, inet_ntoa(stInAddr));
                break;
            }
          }
              break;
              
            case IDB_SETSOCKOPT:
              /* Get the parameter values, and call getsockopt(), 
               *  then display the results! */
          switch (nOptName) {
            case IP_ADD_MEMBERSHIP:
            case IP_DROP_MEMBERSHIP:
                  GetDlgItemText (hDlg, IDT_MULTIADDR, 
                    strDestMulti, MAXHOSTNAME);
                  lMultiAddr = inet_addr(strDestMulti);
                  if (lMultiAddr == INADDR_NONE) {
                    WSAErrMsg("inet_addr()");                              
                  } else {
                    _fmemcpy ((char FAR *)&(stIpReq.imr_multiaddr),
                          (char FAR *)&lMultiAddr, 4);
                  }
                  GetDlgItemText (hDlg, IDT_MULTIINTR, 
                    achMultiIntr, MAXHOSTNAME);
                  lMultiIntr = inet_addr(achMultiIntr); 
                  /* we don't check inet_addr() error since INADDR_NONE is ok */
                  _fmemcpy ((char FAR *)&(stIpReq.imr_interface),
                        (char FAR *)&lMultiIntr, 4);
                  break;
                case IP_MULTICAST_TTL:
                case IP_MULTICAST_LOOP:
                  nOptVal = GetDlgItemInt(hDlg, IDT_OPTVAL, NULL, FALSE);
                  break;
                case IP_MULTICAST_IF:
                  GetDlgItemText (hDlg, IDT_MULTIINTR, 
                    achMultiIntr, MAXHOSTNAME);
                  lMultiIntr = inet_addr(achMultiIntr); 
                  /* we don't check inet_addr() error since INADDR_NONE is ok */
                  _fmemcpy ((char FAR *)&(stIpReq.imr_interface),
                        (char FAR *)&lMultiIntr, 4);
                  break;
                case USER_PARAMETER_VALUES:
                  /* Unknown option, so use user values for all input */
                  nLevel   = GetDlgItemInt(hDlg, IDT_LEVELIN, NULL, FALSE);
                  nOptName = GetDlgItemInt(hDlg, IDT_OPTNAME, NULL, FALSE);
                  nOptVal  = GetDlgItemInt(hDlg, IDT_OPTVAL,  NULL, FALSE);
                  nOptLen  = GetDlgItemInt(hDlg, IDT_OPTLEN,  NULL, FALSE);
                default:
                  break;
              }
              nRet = setsockopt(hSock,
                nLevel, 
                (bBSD_OptNames ? nOptName : nOptName-DEERING_OFFSET),
                lpOptVal,
                nOptLen);
              if (nRet == SOCKET_ERROR) {
                WSAErrMsg("setsockopt()");
              }
              /* Display the results (for better or worse) */
          SetDlgItemInt  (hDlg, IDT_OPTVAL, nOptVal, FALSE);
          break;
              

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -