说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

利用VB设计聊天室

HTML文档下载 WORD文档下载 PDF文档下载
利用VB设计聊天室
作者:何书臣
Internet 上 的 聊 天 室 一 向 是 一 个 吸 引 人 的 地 方, 但 多 用C 语 言 设 计, 我 用VB 设 计 了 一 个 聊 天 室, 取 名 为“ 升 达 自 由 论 坛”, 实 际 使 用 证 明 效 果 良 好。
---- Internet 上 的 通 讯 协 议 是TCP/IP,Internet 上 数 据 传 输 协 议 主 要 有TCP 和UDP,TCP 是 有 连 接 协 议, 它 要 求 计 算 机 进 行 对 话 时 必 须 先 建 立 连 接, 保 证 数 据 传 送 安 全 到 达 目 的 地。 UDP 是 无 连 接 协 议, 它 只 是 将 信 息 送 到 网 络 上, 并 不 检 查 数 据 是 否 到 达 了 目 的 地。 要 进 行 实 时 会 话, 则 应 该 采 用TCP 协 议。 本 程 序 采 用 的 协 议 就 是TCP 协 议。

---- 程 序 分 服 务 和 客 户 程 序 两 部 分。 客 户 程 序 启 动 后 首 先 与 服 务 器 连 接, 连 接 成 功 后, 随 意 输 入 一 个 名 字 即 可 进 入 聊 天 室; 服 务 程 序 则 负 责 维 护 与 每 一 个 客 户 的 连 接 和 数 据 交 换, 并 且 记 录 下 所 有 聊 天 内 容, 及 人 员 名 单。 由 于 在 会 话 过 程 中 大 家 起 的 都 是 假 名 字, 不 可 避 免 地 要 有 的 人 讲 一 些 不 健 康 内 容, 为 了 保 持 秩 序, 服 务 器 程 序 实 现 了IP 地 址 跟 踪 功 能。 管 理 人 员 可 以 很 容 易 地 查 找 出 每 一 个 匿 名 的 计 算 机 名, 并 对 之 进 行 警 告 或 其 它 处 理( 下 面 会 进 一 步 介 绍)。 可 保 证 会 话 内 容 的 健 康。 如 果 服 务 器 程 序 关 闭, 则 所 有 客 户 程 序 自 动 关 闭。

VB5 的Winsock 控 件

---- VB5 企 业 版 提 供 了Winsock 控 件, 要 实 现 两 台 计 算 机 的 对 话, 可 以 通 过Winsock 控 件 进 行。 而 不 需 了 解 更 多 的 数 据 传 输 细 节, 本 程 序 就 是 通 过Winsock 进 行 的。
---- Winsock 有 多 种 属 性、 方 法 和 事 件, 本 文 只 列 举 出 要 使 用 的 属 性、 方 法 和 事 件。

---- ... ...

---- 一 个Winsock 控 件 可 以 建 立 与 一 个 计 算 机 的 联 接, 服 务 器 程 序 中 首 先 设 置 一 个Winsock 控 件, 将 其 索 引 值 设 为 0, 以 便 在 运 行 时 动 态 增 减 元 素, 这 样 可 以 与 多 个 计 算 机 进 行 对 话。

程 序 介 绍

---- 服 务 程 序 部 分

---- 服 务 器 程 序 启 动 时, 先 设 置 自 己 的 本 地 端 口, 因 为 有 些 端 口 有 其 固 定 的 作 用, 如80 是WWW 端 口, 故 尽 可 能 选 择 不 可 能 使 用 的 端 口, 这 里 我 选 择 了1600。 将 连 接 状 态 设 置 为 假, 然 后 开 始 进 行 侦 听。 当 侦 听 到 有 计 算 机 要 求 与 服 务 器 进 行 对 话, 就 接 受, 并 记 录 下 客 户 机 的 地 址、 端 口、 客 户 起 的 匿 名, 将 连 接 状 态 设 置 为 真, 将 上 述 内 容 存 入 一 个 用 户 自 定 义 的 数 组 中, 进 行 动 态 维 护。 用 户 自 定 义 数 据 类 型 如 下:

Private Type ActiveUser
ClientIP As String 记录客户的IP地址
ClientName As String 记录客户的匿名
ClientPort As Integer 记录当前会话的端口
ClientConnected As Boolean
客户连接状态,True表示已连接,False表示没有连接
End Type


---- 做 完 这 些 工 作 后, 服 务 器 再 调 入 一 个 新 控 件, 进 行 新 的 侦 听, 如 此 反 复 不 断。 如 果 有 客 户 退 出 , 则 关 闭 相 应 的 连 接。 注 意 不 能 在 客 户 端 关 闭 连 接, 否 则 会 产 生 错 误, 只 能 由 服 务 器 关 闭 连 接。 服 务 器 程 序 主 要 对 象 设 置

.
.
.


---- 利 用 上 述 对 象 可 以 实 现 服 务 器 的 各 种 功 能, 当 然, 还 可 以 再 加 入 新 控 件, 以 使 界 面 更 美 观。

---- 服 务 程 序 中 三 个 关 键 程 序 段 如 下:

---- 1 . 处 理 连 接 请 求

---- sckServer_ConnectionRequest 过 程 处 理 连 接 请 求, 当 远 程 计 算 机 要 求 连 接 时, 服 务 器 首 先 检 查 用 户 自 定 义 数 组 中 是 否 有 空 闲 位 置( 因 为 在 谈 话 中 途, 肯 定 会 有 人 退 出, 所 以 会 产 生 空 闲 位 置), 如 果 有 则 选 择 空 闲 位 置 给 予 要 求 连 接 的 客 户, 否 则 将 数 组 维 数 加 一, 将 之 给 予 请 求 连 接 的 远 程 节 点。 错 误 处 理 主 要 是 忽 略 两 个 或 两 个 以 上 的 客 户 同 时 要 求 连 接 时 产 生 的 地 址 冲 突 现 象。

---- ... ...

---- 2 . 处 理 处 于 连 接 状 态 的 用 户 发 送 来 的 信 息

---- sckServer_DataArrival 过 程 处 理 客 户 端 传 来 的 数 据。 当 有 数 据 发 送 过 来 后, 服 务 器 首 先 接 收 数 据, 调 用 自 定 义 过 程HandleOtherMessage 检 查 是 谈 话 内 容 还 是 其 它 信 息, 如 果 是 其 它 信 息, 则 在HandleOtherMessage 中 进 行 处 理, 否 则 在 本 过 程 中 进 行 处 理。

---- 因 为Winsock 控 件 将 数 据 首 先 送 至 缓 冲 区, 待 缓 冲 区 满 才 发 送 信 息, 这 显 然 不 能 保 证 适 时 对 话, 用Doevents 语 句 可 确 保Windows 将 数 据 及 时 送 出。 其 中 的 错 误 处 理 程 序 处 理 当 远 程 计 算 机 非 正 常 关 闭 程 序 时 产 生 的 错 误, 因 为 此 时 服 务 器 并 不 知 道 它 已 关 闭, 仍 然 向 它 发 送 信 息, 这 样 就 会 产 生 错 误, 导 致 服 务 程 序 关 闭, 中 断 整 个 谈 话。 处 理 方 法 只 是 简 单 地 关 闭 掉 该 连 接 即 可。

---- ... ...

---- 3. 关 闭 客 户 连 接

---- sckServer_Close 过 程 关 闭 与 客 户 的 连 接, 删 除 控 件, 收 回 系 统 资 源, 将 该 位 置 的 连 接 状 态 设 置 为 假, 以 便 有 用 户 请 求 连 接 时 继 续 使 用。 它 一 般 由HandleOtherMessage 过 程 调 用

---- ... ...

---- 如 何 保 证 聊 天 内 容 的 健 康 是 一 个 很 重 要 的 方 面, 在Internet 上, 我 们 对 谈 话 内 容 不 健 康 者, 只 有 将 之 开 除 出 聊 天 室。 但 在 局 域 网 上 则 可 以 查 出 是 谁 谈 话 不 文 明( 局 域 网 环 境 为Windows NT4.0 服 务 器,Windows 95 工 作 站)。 方 法 如 下: 在95 工 作 站 上 将 网 络 中 的TCP/IP 协 议 中 的IP 地 址 选 项 设 为 动 态 获 得IP 地 址, 在NT 服 务 器 上 用DHCP 管 理 工 具 为 每 一 个 客 户 机 进 行IP 地 址 动 态 分 配。 聊 天 服 务 程 序 记 录 下 来 了 每 一 个 客 户 的IP 地 址, 我 们 就 可 以 通 过DHCP 管 理 工 具 很 容 易 地 查 出 某IP 地 址 对 应 的 计 算 机 名, 并 进 行 处 理。

客 户 程 序 部 分

---- 客 户 程 序 启 动 时 首 先 设 置 服 务 器 的 地 址 及 端 口, 这 里 我 直 接 使 用 了“192.168.0.2”, 这 是 我 的 服 务 器 地 址, 可 以 在Form_load 过 程 中 设 置 你 自 己 的 服 务 器 地 址, 也 可 在 程 序 开 始 时 让 用 户 输 入 服 务 器 地 址 以 增 加 灵 活 性。 时 钟 控 件 用 以 与 远 程 节 点 进 行 自 动 连 接。
---- ... ...

---- 客 户 程 序 主 要 对 象 设 置

---- ... ...

---- “” 显 示 所 有 正 在 聊 天 室 中 的 用 户 名

---- 显 示 当 前 的 状 态( 用 户 名,IP 地 址 及 是 否 密 谈)

---- 与 服 务 器 程 序 一 样, 这 里 列 出 的 并 非 全 部 的 控 件, 但 是 已 经 足 以 完 成 工 作。

---- 客 户 程 序 中 的 自 定 义 类MyMessage 用 来 记 录 自 己 的 信 息,

---- ... ...

---- 类 中 的 变 量cmdExitClick 用 来 记 录 用 户 是 否 按 了 退 出 按 钮, 如 果 是 按 了 退 出 按 钮 则 为 真。 当 用 户 选 择 了 系 统 的 窗 体 关 闭 菜 单 而 没 有 按 退 出 按 钮 时 将 会 产 生 错 误, 因 此 用 它 来 记 录 是 如 何 退 出 的, 如 果 选 择 了 系 统 的 窗 体 关 闭 菜 单, 则 执 行 一 次cmdExit_Click() 过 程, 以 确 保 无 误。

---- 客 户 退 出 时, 不 是 简 单 地 关 闭 自 己 的Winsock 控 件, 而 是 发 送 一 个 字 符 串( 我 采 用 了 一 个 大 家 在 聊 天 时 很 难 用 到 的 字 符 串“=_RE”) 给 服 务 器, 表 明 自 己 要 退 出, 由 服 务 器 端 关 闭 连 接, 进 而 关 闭 自 身。

定价99元首发1万台 360安全路由器启动预约 AMD新产品线曝光 首次实现X86与ARM针脚融合 IT界最难以替代的9个角色 《近匠》英特尔® XDK:从开发、测试到部署,一站式HTML5开发工具 手游云测工具TestBird:测试走入垂直细分领域 阿里巴巴赴美IPO的种种及马云内部邮件全文 盘点EMC World 2014三大看点 2014年Q1:智能手机总销量下滑,WP同比反增119% 着眼无人驾驶技术 英特尔投资日本ZMP公司 移动云服务UCloud快速扩张 成立北京分公司 精准推送 个推推出2.0产品“Smart Push” 从张小龙的七大价值观说开去 2014高德LBS应用大赛正式启动 助力打造生态圈 专访永洪科技CEO何春涛:管理者的炼成及国内大数据公司的挑战 R语言如何发展?商业支持或许可行 专访InMobi CEO Naveen Tewari:Banner广告已经OUT 效力苹果18年的资深高管Katie Cotton将退休 主打“全、新、独、准”,华为推出游戏中心平台 阿里云计算出海挑战亚马逊 首站香港及东南亚 TIOBE 2014年5月编程语言排行榜:Adobe ActionScript挤进Top20 秒杀iPad Mini?微软或将下月发布Surface Mini 大道手游:详解应用内购买的定价趋势与技巧 与英特尔软硬合作,Cloudera将在中国建立业务机构 准备迎接第一个量子计算软件公司吧! 搜狗搜索发布新LOGO和移动App 正全面入驻腾讯各条产品线 做好扁平化设计-视觉篇 关于敏捷研发的跨界反思 《近匠》雨血,一个“独立游戏人”的反思 一周消息树: 阿里巴巴赴美IPO的种种及马云内部邮件全文 一周热点:准备迎接第一个量子计算软件公司吧! 【云先锋】多备份:云端数据物流平台为企业提供云备份服务 字符输入老是重复怎么回事 请问谁用C++编写过MP3的程序? 请问各位高手,给小弟介绍几个比较好的计算机图书的网站吧。 Access 2000不识别{ts '2001-06-21 21:14:01.890000'}中的.890000,如何解决? 如何得到webbrower控件下载消息?(比如下载*.zip文件) 难题一条 MTS怎么只能生成*.pak 和*.dll,却不能生成Clients子目录及在客户端安装的*.exe COM组件安装! PB 的新问题,有性趣请进!!!! 新手,键值问题 这样的问题没人会????? 大家帮忙看个程序 ACCESS数据库的小问题。 怎样使自己的问题成为热点问题的绝招! 关于c++builder中scanline的应用 跨数据库查询,请教各位高手! 这样的问题也没人会????????????????? 如何使用QuickRep制作简单报表?不牵涉任何DataSet的 关于Transaction的问题 请问 ListCtrl Item里的 Checkbox 被点击时对应的消息是什么? 100分~~100分~~高分求购。。。我也‘倾家荡产求购优秀系统分析案例’(paste from yyzh)。。。100分~~ 全中文的用Rose做的实际项目的UML模型! 救命!!我的机器不能下载东西了,怎么回事?? 求教邮件编程问题,邮件客户端如何实现“在服务器端保留备份的功能“? ciscoworks 各位大哥大虾,VC下如何用ADO连SQL SERVER?(急) ShellExecute和CreateProcess有什么区别? 关于海量数据、最有效率的排序、硬盘缓冲与映射、专业数据库的讨论 如何用VB编启动是可以带参数的程序呢?(例如:我自定义了一种文件,双击用我的程序打开,程序自动会打开这个文档 昨天我过生日,今天分蛋糕给大家 请问哪有《java图形设计2Swing篇》可以下? 我要用一个数据库去实时访问另一个据库,我该怎么办 URLghj1976@csdn.net----别吓我,有请您老人家! 谁给我介绍一下sql server7.0教材的比较好的下载网站,我给他20分。 我都急死了,到搜索引擎里搜到的好几个站点都不能用,到底哪儿可以当到3DMAX? 谁有写的比较好的邮件收发程序? 一个微软证书的私钥问题 微软证书的私钥问题 求助,简单问题 男人最快乐的十个瞬间! solaris下装oracle8.1.6遇到jre环境问题 怎抹加分?我准备给别人加40分,可我最多只能加20,请问另外20分怎末加分,为此我可能已得罪了一些人了。 请教下载的问题 如何在运行时动态修改Quick Report的打印机设置? 怎样做一个接受拽拖的LISTBOS(例如,把资源管理器里的文件拖到上面,就自动增加一项 ,就是拖的文件名) 怎样才能隐藏在ctrl+atl+del中进程列表中的项目啊 用C写DLL 请问:airhorse(编程至尊宝),infopower3000的注册码可以用于商业目的吗? 结构化异常处理 linux下如何配置内置Mondem? red hat linux7.0下安装oracle8.1.6遇到问题 (2-根号3)的2013次方乘(2+根号3)的2014次方是多少?这种题怎么算? 试求代数式2x的平方+x-3的最小值,并求出当x取何值时,该代数式取到最小值, 已知x-1=根号3,求代数式(x+1)^2-4(x+1)+4的值 (7-5根号2)的2013次方乘(-7-5根号2)的2014次方 利用配方发求:当X取何事,代数式2X^2-4X+6有最小值,是多少?代数式有最大值吗?为什么? 已知x=根号2-1,求代数式x/x-2÷(2+x-4/2-x)的值 (根号3+根号2)的2013次方×(根号3-根号2)的2014次方 代数式2X的平方-4X+1的最小值为多少 当X=2-根号3时,求代数式(7+4根号3)X^2+(2+根号3)X+根号3的值? (2倍根号2-3)的2013次方×(2倍根号2+3)的2014次方 说明代数式2x的平方-4x-1总大于x的平方-2x-4. 当x=根号3,求代数式(x-1)(2X-根号3)-x(2x-1)的值 |根号3-2|+2013的零方-(-三分之一)的负一次方 +3tan30°带上过程! 代数式根号下(X^2+4)+根号下[(12-X)^2+9]的最小值. 若x的平方+2x+1+根号(y+1)=0,则代数式根号(x-y)的平方的值是? 简化√x^4+x^2y^2(x≤0)也就是根号x的四次方+x的二次方*y的二次方,且x小于等于0 代数式根号(x平方+4)+根号[(12-x)平方+9]的最小值为多少?这个题目是刚开学初三的老师布置的~ 若y=√x-3-√6-3x+√(-2)^2,求代数式x-2分之y+三次根号(2x+y)的值. 根号a的三次方等于多少?根号2y分之x三次方等于多少?(y<0) 代数式根号下【(x-1)平方+1】+根号下【(x-2)平方+9】的最小值 当x=1+根号3时,求代数式(x^2-1)(x+1)/x^2-x÷(1 +x^2+1/2x)+x的值 已知根号(2x-y)的平方=1,立方根(x-2y)的三次方= 1根据算数平方根的意义,由根号(2x-y)2=1,得(2x-y)2=1,得2x-y=1 ①根据立方根的定义,立方根(x-2y)³= -1,得x-2y= 1 ② 由①+②,得3x+3y=2,解得x-y=2/3以 给出代数式根号下[(X+1)的平方+1]+根号下[(x-3)的平方+4]的几何意义,并求它的最小值 已知根号X加根号X分之一=3,求代数式X分之X平方+1 已知根号(2x-y)的平方=1,立方根(x-2y)的三次方= 1 求x-y的值根据算数平方根的意义,由根号(2x-y)2=1,得(2x-y)2=1,得2x-y=1 ①根据立方根的定义,立方根(x-2y)³= -1,得x-2y= 1 ② 由①+②,得3x+ 代数式根号x+根号(x-1)+根号(x-2)的最小值是 若代数式x-1分之根号x有意义,则实数x的取值范围是如题 代数式根号x2+4+根号(12-x)2+9的最小值清楚一点 求证:代数式根号X+根号X—1+根号X—2 的最小值为根号2+1? 若代数式3次根号下x分之1在实数范围内有意义,则x的取值范围为—— 当X取正实数时,求代数式(根号下X^+4)+(根号下(X-12)^+9)的最小值 若x,y都是实数,且满足y>根号(1/2-x)+根号(x-1/2)+1,化简代数式1-x分之根号(x-1)的平方-(y-1)分之根号y平方-2+1. 若代数式根号x-3有意义,则实数x的取值范围是如题. 求代数式(根号下X^2+1)+(根号下(4-X)^2+4)的最小值 若实数X,Y满足Y=根号下2X-1+(根号下1-2X)加三分之一求代数式X平方-2XY+Y平方 求使代数式根号1-x+根号1-2x分之1+2+x分之1有意义的条件 代数式√(x^2+4)+√(x^2-24x+153)的最小值 √=根号RT听老师说要数形结合,具体怎么做忘记了 另外百度知道也有人提这个问题 但是答案是错的,我记得答案是个整数的 所以没必要复制了 已知实数x、y满足|2x-y+1|+3根号3x-2y+4=0,求代数式[(x-y)/(x-2y)]/(x的平方-2y)/[(x的平方-y的平方)/x的已知实数x、y满足|2x-y+1|+3根号3x-2y+4=0,求代数式[(x-y)/(x-2y)]/(x的平方-2y)/[(x的平方-y的平方)/(x的 当x=根号2013-1时,求代数式x的平方+2x+2的值 代数式根号2x-1分之x有意义的x取值范围是 若实数x,y满足y=根号2x-1+根号1-2x+1/3,求代数式x^2-2xy+y^2的值回答的能否详细些 已知代数式x的平方+y的平方+2根号2x-4y+根号42,这个代数式是否存在最大值或最小值 (2+根号3)2013次方与(2-根号3)2012次方乘积的结果是 使代数式根号2x-1分之1有意义.则x的取值范围? 已知实数x满足根号x^2-2x-8+|x^2-5x+4|=0,求代数式根号x/1-x*根号x^2-1的值 根号2-根号3的2012次方乘根号2加根号3的2013次方 使代数式根号2x-1/(3-x)有意义的x的取值范围是 二次根式:当x=根号5-1时,求代数式x^2+5x-6的值.当x=根号5-1时,求代数式x^2+5x-6的值. 若y=根号x-1+根号1-x,则x的2013次方+y的2012次方=? 代数式2x²-4x+6有最小值当x取何值,2x²-4x+6最小值是多少顺片教我一下怎么求 已知x=1/(2-根号3).求代数式根号(x的平方-8x+16)/(x的平方-5x+4)的值 若根号x+1+(y-2013)的根号=0则x的y次方=? 试说明代数式-2x平方+4x-18有最小值,并求出这个最大值,此时x为多少? 已知2倍根号2x-根号6=根号2x+2倍根号2,求代数式(7-4倍根号3)x05+(2-根号3)x+根3的值 若根号x+1+(y-2013)的根号=0则x的y次方=多少 当X取何值时,代数式2X平方减4X加6有最小值.为什么, 问一道题;已知x=2008-5称根号3求代数式x的平方-1/x方-2x=1÷【1=x=1/x-3】的值 (根号3-2)的2013次方·(根号3+2)的2014次方(根号3-2)的2013次方·(根号3+2)的2014次方 当X取何值时,代数式X的平方+2X+3取最小值,并求出最小值 已知X=根号2,则代数式x/(x-1)的值为多少
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn