模拟聊天系统_第1页
模拟聊天系统_第2页
模拟聊天系统_第3页
模拟聊天系统_第4页
模拟聊天系统_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

由于工程太大上传不了 就做成了文档格式 实验步骤 1 创建工程 添加类 界面设计分别创建客户端和服务器工程 客户端工程命名为SelfChat 服 务器工程命名为SelfRoom 2 设计的服务端界面 设置界面中 聊天室动态 只读文本框的ID属性为IDC EDIT INFO 3 为客户端添加一个基于CSocket的套接字类CClientSocket 用于连接服务器通信 和 服务器一样也要添加一个C 结构体tagHeader 定义代码与服务器的完全相同 4 搭建程序框架 为程序添加具体实现代码 5 实验小结 1 在添加类的时候电脑不能自动添加 后来经过手动才完成 2 UpdateUser 函数更新本地用户列表是出了问题 修改后成功实现代码功能 实验结果 实验代码 SelfRoomDlg cpp 实 现 文 件t include stdafx h include SelfRoom h include SelfRoomDlg h include afxdialogex h include ServerSocket h include ClientSocket h include tagHeader h ifdef DEBUG define new DEBUG NEW endif 用 于 应 用 程 序 关 于 菜 单 项 的 CAboutDlg 对 话 框 class CAboutDlg public CDialogEx public CAboutDlg 对 话 框 数 y据Y enum IDD IDD ABOUTBOX protected virtual void DoDataExchange CDataExchange pDX DDX DDV 支 持 实 现 protected DECLARE MESSAGE MAP CAboutDlg CAboutDlg CDialogEx CAboutDlg IDD void CAboutDlg DoDataExchange CDataExchange pDX CDialogEx DoDataExchange pDX BEGIN MESSAGE MAP CAboutDlg CDialogEx END MESSAGE MAP CSelfRoomDlg 对 话 框 CSelfRoomDlg CSelfRoomDlg CWnd pParent NULL CDialogEx CSelfRoomDlg IDD pParent m hIcon AfxGetApp LoadIcon IDR MAINFRAME m strName T sPort T m history T m history T void CSelfRoomDlg DoDataExchange CDataExchange pDX CDialogEx DoDataExchange pDX DDX Control pDX IDC ADMIN m Admin DDX Text pDX IDC ADMIN m strName DDX Control pDX IDC SERVERPORT ServerIP DDX Control pDX IDC SERVERIP ServerIP DDX Control pDX IDC SERVERPORT ServerPort DDX Text pDX IDC SERVERPORT sPort DDX Control pDX IDC MESSAGELIST m MessageList DDX Text pDX IDC MESSAGELIST m history DDX Control pDX IDC USERLIST m UserList DDX Control pDX IDC START m Start DDX Control pDX IDC STOP m Stop DDX Control pDX IDC EXIT m Exit DDX Control pDX IDC EDIT INFO m MessageList DDX Text pDX IDC EDIT INFO m history BEGIN MESSAGE MAP CSelfRoomDlg CDialogEx ON WM SYSCOMMAND ON WM PAINT ON WM QUERYDRAGICON ON BN CLICKED IDC START 将 关 于 菜 单 项 添 加 到 系 统 3菜 单 中D IDM ABOUTBOX 必 须 在 系 统 3命 令 范 围 内 ASSERT IDM ABOUTBOX ASSERT IDM ABOUTBOX AppendMenu MF SEPARATOR pSysMenu AppendMenu MF STRING IDM ABOUTBOX strAboutMenu 设 置 此 对 话 框 的 图 标 当 应 用 程 序 主 窗 口 不 是 对 话 框 时 框 架 将 自 动 执 行D此 操 作 SetIcon m hIcon TRUE 设 置 大 图 标 SetIcon m hIcon FALSE 设 置 小 图 标 TODO 在 此 添 加 额 外 a的 初 始 化 代 码 m pSocket NULL clientSocket NULL 初 始 化 界 面 m Admin SetFocus m Stop EnableWindow false return TRUE 除y非 将 焦1点 设 置 到 控 件t 否 则 返 回 TRUE void CSelfRoomDlg OnSysCommand UINT nID LPARAM lParam if nID dlgAbout DoModal else CDialogEx OnSysCommand nID lParam 如 果 向 对 话 框 添 加 最 小 化 按 钮 则 需 要 a下 面 的 代 码 来 绘 制 该 图 标 对 于 使 1用 文 档 视 图 模 型 的 MFC 应 用 程 序 这a将 由 框 架 自 动 完 成 void CSelfRoomDlg OnPaint if IsIconic CPaintDC dc this 用 于 绘 制 的 设 备 上 下 文 SendMessage WM ICONERASEBKGND reinterpret cast dc GetSafeHdc 0 使 1图 标 在 工 作 区 矩 形 中D居 中D int cxIcon GetSystemMetrics SM CXICON int cyIcon GetSystemMetrics SM CYICON CRect rect GetClientRect int x rect Width cxIcon 1 2 int y rect Height cyIcon 1 2 绘 制 图 标 dc DrawIcon x y m hIcon else CDialogEx OnPaint 当 用 户 拖 动 最 小 化 窗 口 时 系 统 3调 用 此 函 数 y取 得 光a 标 显 示 HCURSOR CSelfRoomDlg OnQueryDragIcon return static cast m hIcon void CSelfRoomDlg OnBnClickedStart TODO 在 此 添 加 控 件t通 知a处 理 程 序 代 码 UpdateData 刷 新 界 面 获 得 用 户 输 入 m pSocket new CServerSocket BYTE nFild 4 CString sIP ServerIP GetAddress nFild 0 nFild 1 nFild 2 nFild 3 获 取 IP地 址 sIP Format d d d d nFild 0 nFild 1 nFild 2 nFild 3 CTime time CTime GetCurrentTime 获 得 当 前 时 间 验 证 步 骤 if m strName IsEmpty AfxMessageBox 请 您 先 填 写 管 理 员 姓 名 return if sIP IsEmpty AfxMessageBox 请 您 配 置 聊 天 室 IP地 址 return if sPort IsEmpty AfxMessageBox 请 您 配 置 要 a开a放 的 端 口 号 return 界 面 初 始 化 m Admin EnableWindow false ServerIP EnableWindow false ServerPort EnableWindow false m Start EnableWindow false m Stop EnableWindow true m Exit EnableWindow false 开a启 聊 天 室 首 先 要 a穿 件t用 于 监 听 y的 套 接 字 if m pSocket Create atoi sPort 1 sIP m MessageList SetWindowTextA m MessageList ReplaceSel 聊 天 室 开a启 成 功 r n CString t time Format Y m d m MessageList ReplaceSel 日 期 t r n t time Format H M S 获 取 聊 天 室 开a启 的 时 刻 信 息 theApp m strName m strName 记 录 在 窗 口 标 题 a栏 上 的 管 理 员 姓 名 m MessageList ReplaceSel t 管 理 员 开a放 聊 天 室 r n if m pSocket Listen 监 听 y开a始 m MessageList ReplaceSel 正y在 等 待 y成 员 的 加 入 r n 现 在 暂Y时 还1没 有 D成 员 加 入 聊 天 此 时 只 有 D管 理 员 一 个 人 m UserList ResetContent m UserList AddString theApp m strName 管 理 员 this SetWindowTextA 管 理 员 m strName SelfRoom void CSelfRoomDlg OnBnClickedStop TODO 在 此 添 加 控 件t通 知a处 理 程 序 代 码 m pSocket Close m pSocket NULL CTime time CTime GetCurrentTime CString t time Format H M S CString strTemp t 管 理 员 theApp m strName 关 闭 聊 天 室 r n m MessageList ReplaceSel strTemp m UserList ResetContent this SetWindowTextA 聊 天 室 管 理 SelfRoom 界 面 m Admin EnableWindow true m Admin SetFocus ServerIP EnableWindow true ServerPort EnableWindow true m Start EnableWindow true m Stop EnableWindow false m Exit EnableWindow true void CSelfRoomDlg OnBnClickedOk TODO 在 此 添 加 控 件t通 知a处 理 程 序 代 码 CAboutDlg dlg dlg DoModal CDialogEx OnOK SelfChatDlg cpp 实 现 文 件t include stdafx h include SelfChat h include SelfChatDlg h include afxdialogex h include tagHeader h ifdef DEBUG define new DEBUG NEW endif 用 于 应 用 程 序 关 于 菜 单 项 的 CAboutDlg 对 话 框 class CAboutDlg public CDialogEx public CAboutDlg 对 话 框 数 y据Y enum IDD IDD ABOUTBOX protected virtual void DoDataExchange CDataExchange pDX DDX DDV 支 持 实 现 protected DECLARE MESSAGE MAP CAboutDlg CAboutDlg CDialogEx CAboutDlg IDD void CAboutDlg DoDataExchange CDataExchange pDX CDialogEx DoDataExchange pDX BEGIN MESSAGE MAP CAboutDlg CDialogEx END MESSAGE MAP CSelfChatDlg 对 话 框 CSelfChatDlg CSelfChatDlg CWnd pParent NULL CDialogEx CSelfChatDlg IDD pParent m hIcon AfxGetApp LoadIcon IDR MAINFRAME M strName T strport T m strMessage T m strName T void CSelfChatDlg DoDataExchange CDataExchange pDX CDialogEx DoDataExchange pDX DDX Control pDX IDC USR m Usr DDX Text pDX IDC USR M strName DDX Control pDX IDC SERVERIP ServerIP DDX Control pDX IDC PORT m port DDX Text pDX IDC PORT strport DDX Control pDX IDC USERLIST m UserList DDX Control pDX IDC MESSAGELIST m MessageList DDX Control pDX IDC EDITWORDS m EditWords DDX Text pDX IDC EDITWORDS m strMessage DDX Control pDX IDC SEND m Send DDX Control pDX IDC REFRESH m Refresh DDX Control pDX IDC ENTER m Enter DDX Control pDX IDC QUIT m Quit DDX Control pDX IDC EXIT m Exit DDX Text pDX IDC USR m strName BEGIN MESSAGE MAP CSelfChatDlg CDialogEx ON WM SYSCOMMAND ON WM PAINT ON WM QUERYDRAGICON ON BN CLICKED IDC ENTER 将 关 于 菜 单 项 添 加 到 系 统 3菜 单 中D IDM ABOUTBOX 必 须 在 系 统 3命 令 范 围 内 ASSERT IDM ABOUTBOX ASSERT IDM ABOUTBOX AppendMenu MF SEPARATOR pSysMenu AppendMenu MF STRING IDM ABOUTBOX strAboutMenu 设 置 此 对 话 框 的 图 标 当 应 用 程 序 主 窗 口 不 是 对 话 框 时 框 架 将 自 动 执 行D此 操 作 SetIcon m hIcon TRUE 设 置 大 图 标 SetIcon m hIcon FALSE 设 置 小 图 标 TODO 在 此 添 加 额 外 a的 初 始 化 代 码 m pSocket NULL 初 始 化 界 面 m Usr SetFocus m Quit EnableWindow false m EditWords EnableWindow false m Send EnableWindow false m Refresh EnableWindow false return TRUE 除y非 将 焦1点 设 置 到 控 件t 否 则 返 回 TRUE void CSelfChatDlg OnSysCommand UINT nID LPARAM lParam if nID dlgAbout DoModal else CDialogEx OnSysCommand nID lParam 如 果 向 对 话 框 添 加 最 小 化 按 钮 则 需 要 a下 面 的 代 码 来 绘 制 该 图 标 对 于 使 1用 文 档 视 图 模 型 的 MFC 应 用 程 序 这a将 由 框 架 自 动 完 成 void CSelfChatDlg OnPaint if IsIconic CPaintDC dc this 用 于 绘 制 的 设 备 上 下 文 SendMessage WM ICONERASEBKGND reinterpret cast dc GetSafeHdc 0 使 1图 标 在 工 作 区 矩 形 中D居 中D int cxIcon GetSystemMetrics SM CXICON int cyIcon GetSystemMetrics SM CYICON CRect rect GetClientRect int x rect Width cxIcon 1 2 int y rect Height cyIcon 1 2 绘 制 图 标 dc DrawIcon x y m hIcon else CDialogEx OnPaint 当 用 户 拖 动 最 小 化 窗 口 时 系 统 3调 用 此 函 数 y取 得 光a 标 显 示 HCURSOR CSelfChatDlg OnQueryDragIcon return static cast m hIcon void CSelfChatDlg OnBnClickedSend TODO 在 此 添 加 控 件t通 知a处 理 程 序 代 码 UpdateData if m strMessage AfxMessageBox 请 您 填 写 要 a发 送 的 消 息 m EditWords SetFocus return Header head head type SEND MESSAGE 聊 天 内 容 Y head len m strMessage GetLength m pSocket Send char if m pSocket Send m strMessage m strMessage GetLength m strMessage UpdateData FALSE m EditWords SetFocus return else AfxMessageBox 网 络 传 输 错 误 void CSelfChatDlg OnBnClickedQuit TODO 在 此 添 加 控 件t通 知a处 理 程 序 代 码 if m pSocket m pSocket Close delete m pSocket 离 开a时 要 a记 得 关 闭 销 毁 Socket m UserList ResetContent m MessageList ReplaceSel 你 已 经 退 出 了 谢 谢 光a顾 this SetWindowTextA 聊 天 室 客 户 端 SelfChat 界 面 m Usr EnableWindow true m Usr SetFocus ServerIP EnableWindow true m port EnableWindow true m Enter EnableWindow true m Quit EnableWindow false m EditWords EnableWindow false m Send EnableWindow false m Exit EnableWindow true void CSelfChatDlg OnBnClickedRefresh TODO 在 此 添 加 控 件t通 知a处 理 程 序 代 码 m MessageList SetWindowTextA void CSelfChatDlg OnBnClickedOk TODO 在 此 添 加 控 件t通 知a处 理 程 序 代 码 CAboutDlg dlg dlg DoModal CDialogEx OnOK void CSelfChatDlg OnBnClickedEnter TODO 在 此 添 加 控 件t通 知a处 理 程 序 代 码 UpdateData m pSocket new CClientSocket m pSocket GetDlg this 获 取 主 界 面 指 针 BYTE nFild 4 CString sip Se

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论