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

利用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”) 给 服 务 器, 表 明 自 己 要 退 出, 由 服 务 器 端 关 闭 连 接, 进 而 关 闭 自 身。

水果生意难做 前新浪架构师徐佳转行试水挖煤 思考软件开发中的快与慢 Apache CouchDB注入新鲜血液,整合分布式技术 CSS Shapes:Web设计人员的新工具 Android 4.3正式发布:四大新功能一览 史玉柱的创业经验谈 3G门户和GO桌面:海外推广的生意经 系统级编程语言性能大PK D语言成首选 解读Facebook第二季度财报 移动业务风生水起 如何避免失败,像Google一样玩转大数据 首届游戏运营技术论坛隆重开幕,共论大数据时代的游戏运营之道 OpenStack Swift遇到了Erasure Code 微软Win7 IE11开发者预览版发布 开始改进开发工具讨好开发者 个性化推荐服务商百分点宣布B轮融资1000万美金 全球著名互联网企业背后的开源力量 基础设施对决Facebook vs. Google:差距绝不是一点点 Amazon Q2财报同比转亏,但AWS反其道而行:高歌猛进! 开拓海外市场的两年:海外上线小技巧 SDCC 2013首批讲师名单出炉 一线工程师唱主角 [开源推荐] 跨平台的.NET运行环境 Mono 3.2发布 Heroku发布API平台Beta版 采用OAuth2.0安全授权 大数据时代:移动数据能为我们带来什么? iOS开发经验谈:如何提高应用开发效率? 贝索斯:你否定亚马逊的现在 我决定亚马逊的未来 谷歌新产品Chromecast:一夜之间价格从35美元飙至100美元 移动周报:苹果5周年限免神作,BADLAND开发者访谈 开源平台Cloud Foundry获IBM和百度支持,步入高速发展的“黄金期” GDK仍未发布 谷歌鼓励Glass开发者可提前用Android SDK开发 Adobe发布PhoneGap 3.0 支持命令行工具 初级vs.高级开发者 哪个性价比更高? 一周观察:Cloud Foundry生态圈渐成型 不知是程序写多了还是失恋的缘故!我头上有一块地方不长头发了,医生说是斑秃!不知程序员里有斑秃的吗? 一IT美女的悲惨遭遇◎! .net2003的编译器如何为类添加消息映射啊???? JAVA的文本编辑,实现修改和排版 Jmai发送邮件问题? 高分求c++ test 我成功配置了一备用数据库,与主库连上了,可是主库坏了,我怎么打不开备用库啊? (SDK)怎样用SendMessage函数反选一个checkButton control(checked->unchecked)呢? 求救,为什么关于VB的帮助的事例看不到? 有拒绝爱情的吗?我还在念大学 做一个不是很大的网站,是用类好,还是用模块的好? 如何对本地机的共享文件夹设置密码 一个讨厌的QQ木马网站如何防治,最好有人能黑了它! 谁写得有能随机生成数字和字母的函数,借来用用? 快速排序的问题。求救 使用 CDatabase 读写 excel 文件的问题。 水园的朋友们,你们好!!!学校的网页!!! how can I show the correct word? 我的机出现了网络重名~~改IP也没用 庐山印象(ZT)----让我想起我小学写的作文哦!看了会起鸡皮疙瘩的! 请问谁有avphone控件3。0的破解版 学校的网页!!!! 500分! 求win2k下探测和阻塞ping的源码. 有关CASL的一个菜问题,请各位帮忙看一下 关于window.confirm的问题,简单问题解决后既散分 请问doc,pdf等文件在iframe中的显示 怎样给datagird的列定义标题? 怎样判断一个文件是否存在呀? 超市系統的報價?? 如何取得类名为#32770的窗口句柄? 我在web.xml里这样设置首业为什么不可以? 请问AMD的CPU对现在市面上的各种软件都能兼容吗? 电脑操作过程中,有时会弹出一些非法操作的窗口,如何把它保存下来? asp中调用javascript的小问题, 今天终于有时间,想看《黑客帝国2》,哪位提供一点信息? 显卡和声卡的作用不太清楚? 请提供结构化布线的下载地址,谢谢! DataList的绑定内容怎么出不来? VB、ASP或相做软件销售的有志创业者,请与我联系 想做一个分页的程序。如何让jdbc 每次只返回20条数据? 小弟想考MCAD,高分寻求指点。 求jbuilder 4.0 序列号 XP上没有待机的选项怎么设置 如何将weblogic7的jdk换成1.4.2? 请问C#怎样实现可拖动的工具条 VB、ASP或相做软件销售的有志创业者,请看 朋友想开一家软件公司,您能为它取一个好听的名字吗? 小弟想考MCAD,高分寻求指点。 TDC数据岛中有个SORTCOLUMN属性设置排序,XML数据岛中不能用该属性? 福建的it业朋友进来报一下money状况啊 这是什么错误? 名言名句.最宝贵的东西_________ 在培根随笔中, 谁能解释一下低温载流子的冻析效应? 求朋友们帮个忙,帮我翻译这两段话.非常感谢啊!介绍了基于 S7-300PLC 、S7-400PLC的西门子先进自动化实验室的构建思路,改变了传统的以单一PLC为基础的实验模式,通过PROFIBUS、PROFINET将 PLC 的控制 浓度为25%的盐水60克,加入20克的水,20克盐,搅拌后的盐水的浓度是多少? 人是类人猿演变的,那么,老鼠是什么演变的呢? 单句改错和英文短语1.All the students are bored with his bored speech._____2.We usually have some bread and a glass of milk with breakfast._____3.His was such good a plan that we all agreed to accept it._____4.Why don't try something differen 爸爸把钓来的一条大鲤鱼分成前、中、后三段,中段的重量恰好比前、后两段重量的和少1千克,后段重量等于中段重量的一半与前段重量的和.只知道前段重2千克,你能算出这条鲤鱼的重量吗?( 爸爸将钓来的一条大鲤鱼分成前中后三段.中段重量恰好比前后两段重量的和少1千克,后段重量等于中段重量的一半与前段重量的和.只知道前段重2千克.这条大鲤鱼重多少千克? 罹癌是什么病 世上什么东西最宝贵? 美国务卿访沙特 称美国与沙特关系必须俄武器出口一半销往亚太 称拟争取非传谷歌更新涂鸦纪念印度女数学家戴维84美国官员表示美政府不会考虑对斯诺登宽埃及法院就谋杀示威者罪名对穆尔西进行湖南3小学生遭绑架杀害续:每名学生家4男子以炉渣充铜渣 诈骗浙江商人63意大利前黑手党组织头目忏悔操控工厂排男子被卡两栋大楼中动弹不得 消防员破埃及法院就谋杀示威者罪名对穆尔西进行叙利亚中部城市发生自杀式炸弹袭击 致最牛初三班主任的讲话,不要做趴在窗户好奇||没有它,章子怡会给汪峰这样的【终极福利放送】结缘无忌哥有“漏”捡送水晶需谨慎!小心亲友跟你绝交100智语||为什么“女强人”都不幸福?茶余饭后||吃蛤蜊吃出个3000美元足协转会新规与国际接轨:取消手续费+广东队逆转香港队捧得第38届省港杯跨到新一年,快戴这些样子的翡翠才够好千万级超跑 谁钥匙霸气 谁土气 谁豪从飞机上看下雨是这样子,太震撼了!低调少奶奶穿越-蝶梦霓影穿越-蝶梦唐庄恋上恶毒皇后蒲公英我的霓裳玉影们寡妇生活大闹西游异界电影院网络重生古道惊风黔阳古城旅游厦格旅游平安寨旅游罗东旅游背崩旅游弹丸礁旅游都督门旅游泽库旅游鸳鸯沟旅游区旅游南屿旅游坪林旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘