网络安全 频道

一个精巧的应用程序实例-wshout

FARPROC lpDialogBoxProc;


switch (message){

case WM_CREATE:


/* Put up the dialog box */

lpDialogBoxProc = MakeProcInstance(DialogProc, hInst);

DialogBox (hInst, (LPSTR) "MainDialog", hWnd, lpDialogBoxProc) ;

FreeProcInstance(lpDialogBoxProc);

PostMessage(hWnd, WM_DESTROY, 0, 0L);

break;


case WM_DESTROY:

PostQuitMessage(0);

break;


default:

return(DefWindowProc(hWnd, message, wParam, lParam));

}

return NULL;


}


 

BOOL FAR PASCAL DialogProc(HWND hOurDlg, WORD message, WORD wParam, LONG lParam)

{

FARPROC lpProcAbout;

FARPROC lpProcSettings;

long lret;

WORD wMajorVersion, wMinorVersion;

char hostnm[64]; /* 包含主机名的工作缓冲区 */


switch (message) {

case WM_INITDIALOG:

/* 选择缺省主机 */

SetDlgItemText(hOurDlg, IDD_HNAME, "");

SendDlgItemMessage(hOurDlg, /* 对话框句柄 */

IDD_HNAME, /* 向何处发送msg */

EM_SETSEL, /* 选择字符 */

NULL, /* 附加信息 */

MAKELONG(0, 0x7fff)); /* 全部内容 */

SetFocus(GetDlgItem(hOurDlg, IDD_HNAME));


/* 初始化 */

hMainDlg = hOurDlg; /* 保存自己的窗口句柄 */

SetDlgItemText(hOurDlg, IDD_COHOST,"Shout to:");

wMajorVersion = MAJOR_VERSION;

wMinorVersion = MINOR_VERSION;

VersionReqd=WSA_MAKEWORD(wMajorVersion, wMinorVersion);


lpmyWSAData = (LPWSADATA)_calloc(1, sizeof(WSADATA));


ret = WSAStartup(VersionReqd, lpmyWSAData);


if (ret != 0){

wshout_err (hOurDlg, WSAGetLastError(), "WSAStartup()");

}


return (TRUE);


case WM_CLOSE:

PostMessage(hOurDlg, WM_COMMAND, IDM_EXIT, 0L);

break;


case WM_SYSCOMMAND:

SendMessage(hOurWnd, message, wParam, lParam);

break;


case WM_COMMAND:

switch (wParam) {

case IDD_CONNECT: /* 按下连接按钮 */

case IDM_START: /* 选择了Start菜单项 */

run_cancelled = FALSE;

/* 不能重入 */

if (running){

MessageBox(hOurWnd,"Shout is already running !",

"Shout", MB_OK | MB_APPLMODAL | MB_ICONEXCLAMATION);

return FALSE;

}

ClearBoxes(hOurDlg);

running = TRUE;


if (iClientOrServer == iShout) {

/* 确保有主机名 */

if (GetDlgItemText (hOurDlg, IDD_HNAME, hostnm, 80) < 2) {

MessageBeep(0);

SetDlgItemText(hOurDlg,

IDD_COMMENT,"No hostname specified");

running = FALSE;

break;

}

sd = ResolveAndConnectHost((char FAR *)hostnm,hOurDlg,iProto,

iPortNo);

if (sd == SOCKET_ERROR) {/* 无法创建套接口 */

running = FALSE;

break;

}

}

else {

sd = GetSocketAndBind(hOurDlg, iProto, iPortNo);

if (sd == SOCKET_ERROR) {

running = FALSE;

break;

}

}


/* Set the I/O mode of the socket */

if (blocking_option) {

lret = 1L; /* 非阻塞模式 */

ioctlsocket(sd, FIONBIO, (u_long FAR *) &lret);

}

else {

lret = 0L; /* 阻塞模式 */

ioctlsocket(sd, FIONBIO, (u_long FAR *) &lret);

}


if (iClientOrServer == iShout) { /* SHOUT */

/* 产生数据并写入套接口 */

if (iProto == iTCP)

lret = TWriteData(sd, hOurDlg, len);

else /* UDP */

lret = UWriteData(sd, hOurDlg, len);

}
0
相关文章