?? multitst.c
字號:
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 + -