用VB设计网络聊天室分析.docx
- 文档编号:1933136
- 上传时间:2022-10-25
- 格式:DOCX
- 页数:16
- 大小:64.74KB
用VB设计网络聊天室分析.docx
《用VB设计网络聊天室分析.docx》由会员分享,可在线阅读,更多相关《用VB设计网络聊天室分析.docx(16页珍藏版)》请在冰豆网上搜索。
用VB设计网络聊天室分析
用VB设计网络聊天室
第1章课程设计的目的
1.加深对计算机网络通信系统的工作原理的理解
通过编写计算机程序模拟网络通信的某些功能,理解并掌握网络通信系统的基本工作原理及工作过程。
2.提高网络应用的能力
学会运用网络语言以及网络协议设计小型网络。
能对小型的网络应用系统进行分析,并能提出建网解决方案。
第2章课程设计分析及要求
2.1网络协议
Internet上的通讯协议是TCP/IP,Internet上数据传输协议主要有TCP和UDP,TCP是有连接协议,它要求计算机进行对话时必须先建立连接,保证数据传送安全到达目的地。
UDP是无连接协议,它只是将信息送到网络上,并不检查数据是否到达了目的地。
要进行实时会话,则应该采用TCP协议。
本程序采用的协议就是TCP协议。
2.2程序组成及简单原理介绍
程序分为服务器端和客户端两部分。
由于本应用程序使用TCP协议,因此决定应用程序是服务器端程序。
那么应用程序需要监听指定的端口。
客户端程序启动后首先与服务器建立连接,连接成功后,输入对方IP地址即可进入聊天室;服务器端程序则负责维护与每一个客户的连接和数据交换,并且记录下所有聊天内容,及人员名单。
如果服务器程序关闭,则所有客户程序自动关闭。
2.3Winsock通信过程
1.Winsock控件
要实现两台计算机的对话,可以通过Winsock控件进行。
而不需了解更多的数据传输细节,本程序就是通过Winsock进行的。
Winsock有多种属性、方法和事件,本文只列举出要使用的属性、方法和事件。
BytesReceived属性:
返回接收到的(当前在接收端缓冲区内)数据的数量。
使用GetData方法来获得数据。
LocalHostName属性:
返回本地计算机名。
在设计时是只读的,而且是不可用的。
LocalIP属性:
返回本地机器的IP地址。
在设计时是只读的,而且是不可用的。
LocalPort属性:
返回或者设置所用到的本地端口。
RemoteHostIP属性:
返回远程机器的IP地址.
Protocal属性:
返回或设置WinSock控件所使用的协议——TCP或UDP。
State属性:
返回控件的状态,用枚举型表示。
在设计时是只读的,而且是不可用的。
SocketHandle属性:
返回一个与套接字句柄对应的值,控件用套接字句柄同WinSock层通信。
在设计时是只读的,而且是不可用的。
Accept方法:
仅适应于TCP服务器应用程序。
在处理ConnectionRequest时使用这个方法接受新连接。
Bind方法:
指定用于TCP连接的LocalPort和LocalIP。
如果有多协议适配卡,就用这个方法。
Close方法:
对客户机和服务器应用程序关闭TCP连接或侦听套接字。
Listen方法:
创建套接字并将其设置为侦听模式。
仅适应于TCP连接。
PeekData方法:
不从输入队列删除数据,除次之外与GetData相似。
该方法仅适用于TCP连接。
SendData方法:
将数据发送给远程计算机。
Close事件:
当远程计算机关闭连接时出现。
应用程序应正确使用Close方法关闭TCP连接。
ConnevtionRequest事件:
当远程计算机请求连接时出现。
DataArrival事件:
当新数据到达时出现。
SendComplete事件:
在完成一个发送操作时出现。
Error事件:
无论何时,只要后台处理中出现错误事件就会出现。
Connect事件:
当一个Connect操作完成时发生。
2.聊天室程序应该包括一个服务器程序和若干个客户端进程,设计时应分别设计客户端程序和服务器端程序。
首先设计一个客户端应用程序,窗口及其包括的控件如图所示,各控件属性如表所示。
在此之前应首先在Projict/Components页面中选择MicrosoftWindowsCommonControls6.0和MicrosoftWinsockControl6.0两项
控件
属性
属性值
Form1
Caption
服务器端
Label1
Caption
待发送数据
Label2
Caption
已接受数据
cmdConnect
Caption
连接
cmdSendData
Caption
发送
cmdExit
Caption
退出
sbWinsockState
Width
4600
sktTCPChatClient
Rrotocal
0-sckTCPRrotocal
sktTCPChatClient
RemotePort
1001
3.设计一个服务器应用程序,窗口及其包括的控件如图所示,各控件属性如表所示。
其他设置同客户端。
控件
属性
属性值
Form1
Caption
服务器端
Label1
Caption
待发送数据
Label2
Caption
已接受数据
Lb1IPAddress
Caption
服务器IP:
cmdSendData
Caption
发送
cmdExit
Caption
退出
sbWinsockState
Width
4725
sktTCPChatServer
Rrotocal
0-sckTCPRrotocal
2.4程序介绍
1.服务器端
一个Winsock控件可以建立与一个计算机的联接,服务器程序中首先设置一个Winsock控件,将其索引值设为0,以便在运行时动态增减元素,这样可以与多个计算机进行对话。
服务程序部分服务器程序启动时,先设置自己的本地端口,因为有些端口有其固定的作用,如80是WWW端口,故尽可能选择不可能使用的端口,这里我选择了1001。
将连接状态设置为假,然后开始进行侦听。
当侦听到有计算机要求与服务器进行对话,就接受,并记录下客户机的地址、端口、客户起的匿名,将连接状态设置为真,将上述内容存入一个用户自定义的数组中,进行动态维护。
用户自定义数据类型如下:
PrivateTypeActiveUserClientIPAsString记录客户的IP地址
ClientNameAsString记录客户的匿名
ClientPortAsInteger记录当前会话的端口
ClientConnectedAsBoolean客户连接状态,True表示已连接,False表示没有连接EndType
做完这些工作后,服务器再调入一个新控件,进行新的侦听,如此反复不断。
如果有客户退出,则关闭相应的连接。
注意不能在客户端关闭连接,否则会产生错误,只能由服务器关闭连接。
服务程序中三个关键程序段如下:
处理连接请求sckServer_ConnectionRequest过程处理连接请求,当远程计算机要求连接时,服务器首先检查用户自定义数组中是否有空闲位置(因为在谈话中途,肯定会有人退出,所以会产生空闲位置),如果有则选择空闲位置给予要求连接的客户,否则将数组维数加一,将之给予请求连接的远程节点。
错误处理主要是忽略两个或两个以上的客户同时要求连接时产生的地址冲突现象。
处理处于连接状态的用户发送来的信息sckServer_DataArrival过程处理客户端传来的数据。
当有数据发送过来后,服务器首先接收数据,调用自定义过程HandleOth-erMessage检查是谈话内容还是其它信息,如果是其它信息,则在HandleOtherMessage中进行处理,否则在本过程中进行处理。
因为Winsock控件将数据首先送至缓冲区,待缓冲区满才发送信息,这显然不能保证适时对话,用Doevents语句可确保Windows将数据及时送出。
其中的错误处理程序处理当远程计算机非正常关闭程序时产生的错误,因为此时服务器并不知道它已关闭,仍然向它发送信息,这样就会产生错误,导致服务程序关闭,中断整个谈话。
处理方法只是简单地关闭掉该连接即可。
关闭客户连接sckServer_Close过程关闭与客户的连接,删除控件,收回系统资源,将该位置的连接状态设置为假,以便有用户请求连接时继续使用。
它一般由HandleOtherMessage过程调用。
2.客户端
客户端程序启动时首先设置服务器的地址及端口,这里我直接使用了“192.168.1.86”,这是我的服务器地址,可以在Form_load过程中设置你自己的服务器地址,也可在程序开始时让用户输入服务器地址以增加灵活性。
时钟控件用以与远程节点进行自动连接。
客户程序主要对象设置
“”显示所有正在聊天室中的用户名显示当前的状态(用户名,IP地址及是否密谈)。
与服务器程序一样,这里列出的并非全部的控件,但是已经足以完成工作。
客户程序中的自定义类MyMessage用来记录自己的信息。
类中的变量cmdExitClick用来记录用户是否按了退出按钮,如果是按了退出按钮则为真。
当用户选择了系统的窗体关闭菜单而没有按退出按钮时将会产生错误,因此用它来记录是如何退出的,如果选择了系统的窗体关闭菜单,则执行一次cmdExit_Click()过程,以确保无误。
客户退出时,不是简单地关闭自己的Winsock控件,而是发送一个字符串(我采用了一个大家在聊天时很难用到的字符串“=_RE”)给服务器,表明自己要退出,由服务器端关闭连接,进而关闭自身。
第3章TCP协议相关知识
TCP/IP协议(TransmissionControlProtocol/InternetProtocol,传输控制协议/互联网络协议)是Internet最基本的协议。
TCP/IP协议是一组包括TCP协议和IP协议,UDP(UserDatagramProtocol)协议、ICMP(InternetControlMessageProtocol)协议和其他一些协议的协议组。
TCP/IP中的协议
1.IP
网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。
IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。
IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。
IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。
高层的TCP和UDP服务在接收数据包时,通常假设包中的源地址是有效的。
也可以这样说,IP地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发送来的。
IP确认包含一个选项,叫作IPsourcerouting,可以用来指定一条源地址和目的地址之间的直接路径。
对于一些TCP和UDP的服务来说,使用了该选项的IP包好象是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。
这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。
那么,许多依靠IP源地址做确认的服务将产生问题并且会被非法入侵。
2.TCP
如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。
TCP将包排序并进行错误检查,同时实现虚电路间的连接。
TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。
TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。
应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。
面向连接的服务(例如Telnet、FTP、rlogin、XWindows和SMTP)需要高度的可靠性,所以它们使用了TCP。
DNS在某些情况下使
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 设计 网络 聊天室 分析