计算机网络实验指导书(详细版) 下载本文

内容发布更新时间 : 2024/6/9 11:14:13星期一 下面是文章的全部内容请认真阅读。

计算机网络实验指导书

_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam ;局部变量,加载并初始化WinSock库时返回该库的有关信息@stWsa,以及为连接而创建的线程句柄@dw

local @stWsa:WSADATA,@dwThreadID mov eax,wMsg .if eax == WM_SOCKET

;******************************************************************** ; 处理 Socket 消息

;******************************************************************** mov eax,lParam .if ax == FD_READ ;套接字收到对端发送来的数据包,启动TCP数据包接收线程 invoke _RecvData,wParam .elseif ax == FD_WRITE ;缓冲区空,可以继续发送数据,激活发送按钮 invoke EnableWindow,hWinOK,TRUE .elseif ax == FD_CONNECT ;用套接字连接对方,系统返回连接消息 shr eax,16 .if ax == NULL ;连接成功 ;将hWinConnect按钮的提示信息由“连接(C)”转换为“断开(D)”

invoke SetWindowText,hWinConnect,addr szDisConnect ;激活“断开(D)”按钮 invoke EnableWindow,hWinConnect,TRUE ;禁止输入服务器IP地址 invoke EnableWindow,hWinServer,FALSE ;允许输入文字信息并发送 invoke EnableWindow,hWinText,TRUE invoke EnableWindow,hWinOK,TRUE ;光标置于文字输入框中,等待信息输入 invoke SetFocus,hWinText .else ;连接失败 ;断开连接 invoke _DisConnect ;弹出“错误”对话框,显示出错信息“无法连接到服务器!” invoke MessageBox,hWinMain,offset szErrConnect,NULL,\\ MB_OK or MB_ICONWARNING .endif .elseif ax == FD_CLOSE ;检测到套接字对应连接被关闭,断开与服务器的连接 call _DisConnect .endif

;********************************************************************

第 51 页 共 64 页

计算机网络实验指导书

; 处理窗口消息

;******************************************************************** .elseif eax == WM_COMMAND mov eax,wParam .if ax == IDOK ;按钮“发送(S)”被点击,启动发送数据线程 invoke _SendData .elseif ax == IDC_CONNECT ;按钮“连接(C)”或“断开(D)”被点击,启动相关线程 ;套接字hSocket非零,说明已经建立了连接,点击该按钮是要断开连接

.if hSocket invoke _DisConnect ;启动断开连接线程 ;套接字hSocket为零,说明未建立连接,点击该按钮是要建立连接 .else ;创建线程,句柄为@dwThreadID,对应子程序为_Connect invoke CreateThread,NULL,0,offset _Connect,NULL,\\ NULL,addr @dwThreadID ;连接完成后,关闭连接线程 invoke CloseHandle,eax .endif .endif

;******************************************************************** ; 处理 窗口关闭 消息

;******************************************************************** ;用户关闭连接 .elseif eax == WM_CLOSE ;断开连接 invoke _DisConnect ;卸载WinSock库 invoke WSACleanup ;关闭窗口hWinMain invoke EndDialog,hWinMain,NULL

;******************************************************************** ; 处理 窗口初始化 消息

;******************************************************************** ;窗口被激活时,马上要运行的窗口初始化程序 .elseif eax == WM_INITDIALOG ;hWnd和hWinMain保存窗口句柄 push hWnd pop hWinMain ;以下程序段是建立窗口资源标签元素与程序变量之间的联系,参见图4.6

invoke GetDlgItem,hWnd,IDC_SERVER

第 52 页 共 64 页

计算机网络实验指导书

mov hWinServer,eax invoke GetDlgItem,hWnd,IDOK mov hWinOK,eax invoke GetDlgItem,hWnd,IDC_TEXT mov hWinText,eax invoke GetDlgItem,hWnd,IDC_CONNECT mov hWinConnect,eax invoke GetDlgItem,hWnd,IDC_INFO mov hWinInfo,eax ;服务器IP地址默认值设置为szIP,即127.0.0.1 invoke SetWindowText,hWinServer,addr szIP ;加载并初始化WinSock库,版本号为1.1,返回信息在@stWsa中 invoke WSAStartup,101h,addr @stWsa

;******************************************************************** .else ;消息处理失败,返回 mov eax,FALSE ret .endif ;消息处理成功,返回 mov eax,TRUE ret

_ProcDlgMain endp

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 程序开始

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

start: ;创建进程,获得进程句柄eax

invoke GetModuleHandle,NULL

;激活资源文件定义的主窗口DLG_MAIN,执行主窗口程序_ProcDlgMain invoke DialogBoxParam,eax,DLG_MAIN,NULL,offset _ProcDlgMain,0 ;用户关闭主窗口,退出进程 invoke ExitProcess,NULL

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

end start

第 53 页 共 64 页

计算机网络实验指导书

附录4 聊天程序服务器端程序说明

一、 资源文件SERVER.RC说明

1、资源文件源程序

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

#include

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

;定义窗口图标

#define ICO_MAIN 1000 ;定义窗口资源

#define DLG_MAIN 2000 ;整个窗口资源的标签与ID定义 #define IDC_INFO 2001 ;客户信息显示主窗口定义 #define IDC_COUNT 2002 ;在线客户计数

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

ICO_MAIN icon \;图标外部对应的文件

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

DLG_MAIN DIALOG 94, 84, 245, 154 ;定义主窗口大小及属性,如:标题及属性等

STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU

CAPTION \聊天-服务器端\FONT 9, \宋体\{

;定义客户端传送的所有信息窗口,允许显示多行且自动滚屏

EDITTEXT IDC_INFO, 4, 3, 237, 133, ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_READONLY | WS_BORDER | WS_VSCROLL | WS_TABSTOP

;定义在线用户数量显示对象

LTEXT \当前连线客户端数量:\ LTEXT \}

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

2、资源文件定义的运行窗口及对应的程序变量

;该资源文件定义的服务器端运行窗口如图 4.7所示。

第 54 页 共 64 页

计算机网络实验指导书

图4.7 资源文件定义的程序运行窗口及控件

二、服务器端程序说明

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; Server.asm

; 使用 TCP 协议的聊天室例子程序 — 服务器端

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 使用 nmake 或下列命令进行编译和链接: ; ml /c /coff Server.asm ; rc Server.rc

; Link /subsystem:windows Server.obj Server.res

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.386 .model flat, stdcall option casemap :none ; case sensitive

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; Include 数据

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

include include includelib

windows.inc user32.inc user32.lib

;窗口库

;32位用户库

第 55 页 共 64 页