📄 3-4.html
字号:
<P ALIGN="JUSTIFY">	 wMinorVersion = MINOR_VERSION;</P>
<P ALIGN="JUSTIFY">	 VersionReqd=WSA_MAKEWORD(wMajorVersion, wMinorVersion);</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">	 lpmyWSAData = (LPWSADATA)_calloc(1, sizeof(WSADATA));</P>
<P ALIGN="JUSTIFY">	 </P>
<P ALIGN="JUSTIFY">	 ret = WSAStartup(VersionReqd, lpmyWSAData);</P>
<P ALIGN="JUSTIFY">	 </P>
<P ALIGN="JUSTIFY">	 if (ret != 0){</P>
<P ALIGN="JUSTIFY">		wshout_err (hOurDlg, WSAGetLastError(), "WSAStartup()");</P>
<P ALIGN="JUSTIFY">	 }</P>
<P ALIGN="JUSTIFY">	 </P>
<P ALIGN="JUSTIFY">	 return (TRUE); </P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">	case WM_CLOSE:</P>
<P ALIGN="JUSTIFY">	 PostMessage(hOurDlg, WM_COMMAND, IDM_EXIT, 0L);</P>
<P ALIGN="JUSTIFY">	 break;</P>
<P ALIGN="JUSTIFY">	 </P>
<P ALIGN="JUSTIFY">	case WM_SYSCOMMAND:</P>
<P ALIGN="JUSTIFY">	 SendMessage(hOurWnd, message, wParam, lParam);</P>
<P ALIGN="JUSTIFY">	 break;</P>
<P ALIGN="JUSTIFY">	 </P>
<P ALIGN="JUSTIFY">	case WM_COMMAND:</P>
<P ALIGN="JUSTIFY">	 switch (wParam) {</P>
<P ALIGN="JUSTIFY">	 case IDD_CONNECT:		/* </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>按下连接按钮</FONT><FONT SIZE=3> */</P>
<P ALIGN="JUSTIFY">	 case IDM_START:		/* </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>选择了</FONT><FONT SIZE=3>Start</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>菜单项</FONT><FONT SIZE=3> */</P>
<P ALIGN="JUSTIFY">		run_cancelled = FALSE;</P>
<P ALIGN="JUSTIFY">		/* </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>不能重入</FONT><FONT SIZE=3> */</P>
<P ALIGN="JUSTIFY">		if (running){</P>
<P ALIGN="JUSTIFY">		 MessageBox(hOurWnd,"Shout is already running !",</P>
<P ALIGN="JUSTIFY">			"Shout", MB_OK | MB_APPLMODAL | MB_ICONEXCLAMATION);</P>
<P ALIGN="JUSTIFY">		 return FALSE;</P>
<P ALIGN="JUSTIFY">		}</P>
<P ALIGN="JUSTIFY">		ClearBoxes(hOurDlg);</P>
<P ALIGN="JUSTIFY">		running = TRUE;</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">		</FONT><FONT SIZE=3>if (iClientOrServer == iShout) {</P>
<P ALIGN="JUSTIFY">		 /* </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>确保有主机名</FONT><FONT SIZE=3> */</P>
<P ALIGN="JUSTIFY">		 if (GetDlgItemText (hOurDlg, IDD_HNAME, hostnm, 80) < 2) {</P>
<P ALIGN="JUSTIFY">		 MessageBeep(0);</P>
<P ALIGN="JUSTIFY">		 SetDlgItemText(hOurDlg, </P>
<P ALIGN="JUSTIFY">			 IDD_COMMENT,"No hostname specified");</P>
<P ALIGN="JUSTIFY">		 running = FALSE;</P>
<P ALIGN="JUSTIFY">		 break;</P>
<P ALIGN="JUSTIFY">		 }</P>
<P ALIGN="JUSTIFY">		 sd = ResolveAndConnectHost((char FAR *)hostnm,hOurDlg,iProto,</P>
<P ALIGN="JUSTIFY">		 iPortNo);</P>
<P ALIGN="JUSTIFY">		 if (sd == SOCKET_ERROR) {/* </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>无法创建套接口</FONT><FONT SIZE=3> */</P>
<P ALIGN="JUSTIFY">		 running = FALSE;</P>
<P ALIGN="JUSTIFY">		 break;</P>
<P ALIGN="JUSTIFY">		 }</P>
<P ALIGN="JUSTIFY">	 }</P>
<P ALIGN="JUSTIFY">		else {</P>
<P ALIGN="JUSTIFY">		 sd = GetSocketAndBind(hOurDlg, iProto, iPortNo);</P>
<P ALIGN="JUSTIFY">		 if (sd == SOCKET_ERROR) {</P>
<P ALIGN="JUSTIFY">		 running = FALSE;</P>
<P ALIGN="JUSTIFY">		 break;</P>
<P ALIGN="JUSTIFY">		 }</P>
<P ALIGN="JUSTIFY">	 }</P>
<P ALIGN="JUSTIFY">		</P>
<P ALIGN="JUSTIFY">		/* Set the I/O mode of the socket */</P>
<P ALIGN="JUSTIFY">		if (blocking_option) {</P>
<P ALIGN="JUSTIFY">		 lret = 1L; /* </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>非阻塞模式</FONT><FONT SIZE=3> */</P>
<P ALIGN="JUSTIFY">		 ioctlsocket(sd, FIONBIO, (u_long FAR *) &lret);</P>
<P ALIGN="JUSTIFY">		}</P>
<P ALIGN="JUSTIFY">		else {</P>
<P ALIGN="JUSTIFY">		 lret = 0L; /* </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>阻塞模式</FONT><FONT SIZE=3> */</P>
<P ALIGN="JUSTIFY">		 ioctlsocket(sd, FIONBIO, (u_long FAR *) &lret);</P>
<P ALIGN="JUSTIFY">		}</P>
<P ALIGN="JUSTIFY">		</P>
<P ALIGN="JUSTIFY">		if (iClientOrServer == iShout) { /* SHOUT */</P>
<P ALIGN="JUSTIFY">		 /* </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>产生数据并写入套接口</FONT><FONT SIZE=3> */</P>
<P ALIGN="JUSTIFY">		 if (iProto == iTCP) </P>
<P ALIGN="JUSTIFY">			lret = TWriteData(sd, hOurDlg, len);</P>
<P ALIGN="JUSTIFY">		 else /* UDP */</P>
<P ALIGN="JUSTIFY">			lret = UWriteData(sd, hOurDlg, len);</P>
<P ALIGN="JUSTIFY">		}</P>
<P ALIGN="JUSTIFY">		else {	/* LISTEN */</P>
<P ALIGN="JUSTIFY">		 if (iProto == iTCP)</P>
<P ALIGN="JUSTIFY">			lret = TReadData(sd,hOurDlg, len);</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">		</FONT><FONT SIZE=3> else /* UDP */</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">			</FONT><FONT SIZE=3>lret = UReadData(sd,hOurDlg, len);</P>
<P ALIGN="JUSTIFY">		}</P>
<P ALIGN="JUSTIFY">		</P>
<P ALIGN="JUSTIFY">		closesocket(sd);</P>
<P ALIGN="JUSTIFY">		running = FALSE;</P>
<P ALIGN="JUSTIFY">		break;</P>
<P ALIGN="JUSTIFY">		</P>
<P ALIGN="JUSTIFY">	 case IDD_CANCEL:</P>
<P ALIGN="JUSTIFY">		if (running) {</P>
<P ALIGN="JUSTIFY">		 /* </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>停止</FONT><FONT SIZE=3> */</P>
<P ALIGN="JUSTIFY">		 ret = WSACancelBlockingCall();</P>
<P ALIGN="JUSTIFY">		 run_cancelled = TRUE;</P>
<P ALIGN="JUSTIFY">		 if (ret == SOCKET_ERROR) {</P>
<P ALIGN="JUSTIFY">			/* WSANOTINITIALISED or WSAENETDOWN or WSAEINVAL */</P>
<P ALIGN="JUSTIFY">			if (h_errno == WSAENETDOWN) {</P>
<P ALIGN="JUSTIFY">			 /* Watch out for hAcceptSock! */</P>
<P ALIGN="JUSTIFY">			 /* close what is left of the connection */</P>
<P ALIGN="JUSTIFY">			 closesocket(sd);</P>
<P ALIGN="JUSTIFY">			}</P>
<P ALIGN="JUSTIFY">		 }</P>
<P ALIGN="JUSTIFY">		}</P>
<P ALIGN="JUSTIFY">		break;</P>
<P ALIGN="JUSTIFY">		</P>
<P ALIGN="JUSTIFY">	 case IDM_EXIT:</P>
<P ALIGN="JUSTIFY">		ret = WSACleanup();</P>
<P ALIGN="JUSTIFY">		if (ret == SOCKET_ERROR && h_errno == WSAEINPROGRESS){</P>
<P ALIGN="JUSTIFY">		 MessageBox(hOurWnd, </P>
<P ALIGN="JUSTIFY">			"Data transfer in progress.\nStop transfer first.",</P>
<P ALIGN="JUSTIFY">			"WndProc()", MB_OK | MB_APPLMODAL|MB_ICONINFORMATION);</P>
<P ALIGN="JUSTIFY">		 break; /* </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>一个套接口正处于阻塞状态</FONT><FONT SIZE=3> */</P>
<P ALIGN="JUSTIFY">		}</P>
<P ALIGN="JUSTIFY">		</P>
<P ALIGN="JUSTIFY">		_free((char NEAR *) lpmyWSAData);</P>
<P ALIGN="JUSTIFY">		EndDialog(hOurDlg, TRUE) ; /* </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>退出</FONT><FONT SIZE=3> */</P>
<P ALIGN="JUSTIFY">		break;</P>
<P ALIGN="JUSTIFY">		</P>
<P ALIGN="JUSTIFY">	 case IDM_ABOUT:</P>
<P ALIGN="JUSTIFY">		lpProcAbout = MakeProcInstance(About, hInst);</P>
<P ALIGN="JUSTIFY">		DialogBox(hInst, "AboutBox", hOurDlg, lpProcAbout);</P>
<P ALIGN="JUSTIFY">		FreeProcInstance(lpProcAbout);</P>
<P ALIGN="JUSTIFY">		break;</P>
<P ALIGN="JUSTIFY">		</P>
<P ALIGN="JUSTIFY">	 case IDM_SETTINGS:</P>
<P ALIGN="JUSTIFY">		lpProcSettings = MakeProcInstance(Settings, hInst);</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">		</FONT><FONT SIZE=3>DialogBox(hInst, "SettingsDialog", hOurDlg, lpProcSettings);</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">		</FONT><FONT SIZE=3>FreeProcInstance(lpProcSettings);</P>
<P ALIGN="JUSTIFY">		break;</P>
<P ALIGN="JUSTIFY">		</P>
<P ALIGN="JUSTIFY">	 default:</P>
<P ALIGN="JUSTIFY">		break;</P>
<P ALIGN="JUSTIFY">		</P>
<P ALIGN="JUSTIFY">	 } /* switch (wParam) */</P>
<P ALIGN="JUSTIFY">	 break;</P>
<P ALIGN="JUSTIFY">	} /* switch (message) */</P>
<P ALIGN="JUSTIFY"> return FALSE;</P>
<P ALIGN="JUSTIFY">}</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">/* </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>此函数处理</FONT><FONT SIZE=3>About</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>对话框</FONT><FONT SIZE=3> */</P>
<P ALIGN="JUSTIFY">BOOL FAR PASCAL About(HWND hDlg, WORD message, WORD wParam, LONG lParam)</P>
<P ALIGN="JUSTIFY">{</P>
<P ALIGN="JUSTIFY"> char tempBuf[15];</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> switch (message) {</P>
<P ALIGN="JUSTIFY"> case WM_INITDIALOG:</P>
<P ALIGN="JUSTIFY">	SetDlgItemText(hDlg, IDA_COPYRIGHT,(LPSTR)lpmyWSAData->szDescription);</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">	wsprintf(tempBuf, "%d.%2d\n",MAJOR_VERSION, MINOR_VERSION);</P>
<P ALIGN="JUSTIFY">	SetDlgItemText(hDlg, IDA_APP_VERSION, (LPSTR) tempBuf);</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">	wsprintf(tempBuf, "%d.%2d\n", </P>
<P ALIGN="JUSTIFY">	 lpmyWSAData->wVersion%256,lpmyWSAData->wVersion/256);</P>
<P ALIGN="JUSTIFY">	SetDlgItemText (hDlg, IDA_DLL_VERSION, (LPSTR) tempBuf);</P>
<P ALIGN="JUSTIFY">	return (FALSE);</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY"> case WM_COMMAND:</P>
<P ALIGN="JUSTIFY">	if (wParam == IDOK</P>
<P ALIGN="JUSTIFY">	|| wParam == IDCANCEL) {</P>
<P ALIGN="JUSTIFY">	EndDialog(hDlg, TRUE);</P>
<P ALIGN="JUSTIFY">	return (TRUE);</P>
<P ALIGN="JUSTIFY">	}</P>
<P ALIGN="JUSTIFY">	break;</P>
<P ALIGN="JUSTIFY"> }</P>
<P ALIGN="JUSTIFY"> return (FALSE);</P>
<P ALIGN="JUSTIFY">}</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">/* </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>此函数处理</FONT><FONT SIZE=3>Settings </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>对话框</FONT><FONT SIZE=3> */</P>
<P ALIGN="JUSTIFY">BOOL FAR PASCAL Settings(HWND hDlg, WORD message, WORD wParam, LONG lParam)</P>
<P ALIGN="JUSTIFY">{</P>
<P ALIGN="JUSTIFY"> int buffer_len = len;</P>
<P ALIGN="JUSTIFY"> int port_no = iPortNo;</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> switch (message) {</P>
<P ALIGN="JUSTIFY"> case WM_INITDIALOG:</P>
<P ALIGN="JUSTIFY">	/* Select a default send() buffer length */</P>
<P ALIGN="JUSTIFY">	SetDlgItemInt(hDlg, IDS_BUFFLEN, len, 0);</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">	/* Select a default port number */</P>
<P ALIGN="JUSTIFY">	SetDlgItemInt(hDlg, IDS_PORTNO, iPortNo, 0);</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">	if (iClientOrServer == iShout)		/* </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>程序类型</FONT><FONT SIZE=3> */</P>
<P ALIGN="JUSTIFY">	 CheckThisProgBoxOn(hDlg, IDS_CLIENT);</P>
<P ALIGN="JUSTIFY">	else</P>
<P ALIGN="JUSTIFY">	 CheckThisProgBoxOn(hDlg, IDS_SERVER);</P>
<P ALIGN="JUSTIFY">	</P>
<P ALIGN="JUSTIFY">	if (iProto == iTCP)			/* </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>协议类型</FONT><FONT SIZE=3> */</P>
<P ALIGN="JUSTIFY">	 CheckThisProtoBoxOn(hDlg, IDS_TCP);</P>
<P ALIGN="JUSTIFY">	else</P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -