转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
利用VB设计聊天室         ★★★★

利用VB设计聊天室

作者:闵涛 文章来源:闵涛的学习笔记 点击数:541 更新时间:2009/4/23 14:58:26
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。将连接状态设置为假,然后开始进行侦听。当侦听到有计 算机要求与服务器进行对话,就接受,并记录下客户机的地址、端口、客户起的匿名,将连接状 态设置为真,将上述内容存入一个用户自定义的数组中,进行动态维护。用户自定义数据类型 如下:

PrivateTypeActiveUser
ClientIPAsString记录客户的IP地址
ClientNameAsString记录客户的匿名
ClientPortAsInteger记录当前会话的端口
ClientConnectedAsBoolean
客户连接状态,True表示已连接,False表示没有连接
EndType


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

.
.
.


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

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

  1.处理连接请求

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

  ......

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

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

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

  ... ...

  3.关闭客户连接

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

  ......

  如何保证聊天 内容的健康是一个很重要的方面,在Internet上,我们对谈话内容不健康者,只有将之开除出 聊天室。但在局域网上则可以查出是谁谈话不文明(局域网环境为WindowsNT4.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”)给服务器,表明自己要退出,由服务器端关闭连接,进而 关闭自身。


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台