没有合适的资源?快使用搜索试试~ 我知道了~
用VB设计网络聊天室.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 112 浏览量
2021-12-25
20:43:27
上传
评论
收藏 53KB DOCX 举报
温馨提示
试读
12页
用VB设计网络聊天室.docx
资源推荐
资源详情
资源评论
1
用 VB 设计网络聊天室
第 1 章 课程设计的目的
1.加深对计算机网络通信系统的工作原理的理解
通过编写计算机程序模拟网络通信的某些功能,理解并掌握网络通信系统的基本工
作原理及工作过程。
2.提高网络应用的能力
学会运用网络语言以及网络协议设计小型网络。能对小型的网络应用系统进行分
析,并能提出建网解决方案。
第 2 章 课程设计分析及要求
2.1
网络协议
Internet 上的通讯协议是TCP/IP,Internet 上数据传输协议主要有TCP 和UDP,
TCP 是有连接协议,它要求计算机进行对话时必须先建立连接,保证数据传送安全到达
目的地。UDP 是无连接协议,它只是将信息送到网络上,并不检查数据是否到达了目的
地。要进行实时会话,则应该采用TCP 协议。本程序采用的协议就是TCP 协议。
2.2
程序组成及简单原理介绍
程序分为服务器端和客户端两部分。由于本应用程序使用TCP协议,因此决定应用程
序是服务器端程序。那么应用程序需要监听指定的端口。客户端程序启动后首先与服务
器建立连接,连接成功后,输入对方IP地址即可进入聊天室;服务器端程序则负责维护
与每一个客户的连接和数据交换,并且记录下所有聊天内容,及人员名单。如果服务器
程序关闭,则所有客户程序自动关闭。
2.3
Winsock通信过程
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连接。
2
PeekData方法:不从输入队列删除数据,除次之外与GetData相似。该方法仅适用于TCP
连接。
SendData方法:将数据发送给远程计算机。
Close事件:当远程计算机关闭连接时出现。应用程序应正确使用Close方法关闭TCP连
接。
ConnevtionRequest事件:当远程计算机请求连接时出现。
DataArrival事件:当新数据到达时出现。
SendComplete事件:在完成一个发送操作时出现。
Error事件:无论何时,只要后台处理中出现错误事件就会出现。
Connect事件:当一个Connect操作完成时发生。
2.聊天室程序应该包括一个服务器程序和若干个客户端进程,设计时应分别设计客户端
程序和服务器端程序。
首先设计一个客户端应用程序,窗口及其包括的控件如图所示,各控件属性如表所
示。在此之前应首先在Projict/Components页面中选择Microsoft Windows
CommonControls 6.0和Microsoft
控件
Winsock Control
属性
6.0两项
属性值
Form1
Label1
Label2
Caption
Caption
Caption
服务器端
待发送数据
已接受数据
cmdConnect
cmdSendData
cmdExit
sbWinsockState
sktTCPChatClient
sktTCPChatClient
Caption
Caption
Caption
Width
Rrotocal
RemotePort
连接
发送
退出
4600
0-sckTCPRrotocal
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。 将
连接状态设置为假,然后开始进行侦听。当侦听到有计算机要求与服务器进行对话,就
3
接受,并记录下客户机的地址、端口、客户起的匿名,将连接状态设置为真,将上述内
容存入一个用户自定义的数组中,进行动态维护。用户自定义数据类型如下:
Private Type ActiveUser ClientIP As String 记录客户的IP地址
ClientName As String 记录客户的匿名
ClientPort As Integer 记录当前会话的端口
ClientConnected As Boolean客户连接状态,True表示已连接,False表示没有连接End
Type
做完这些工作后,服务器再调入一个新控件,进行新的侦听,如此反复不断。如果
有客户退出,则关闭相应的连接。注意不能在客户端关闭连接,否则会产生错误,只能
由服务器关闭连接。
服务程序中三个关键程序段如下:处理连接请求sckServer_ConnectionRequest 过
程处理连接请求,当远程计算机要求连接时,服务器首先检查用户自定义数组中是否有
空闲位置(因为在谈话中途,肯定会有人退出,所以会产生空闲位置),如果有则选择
空闲位置给予要求连接的客户,否则将数组维数加一,将之给予请求连接的远程节点。
错误处理主要是忽略两个或两个以上的客户同时要求连接时产生的地址冲突现象。
处理处于连接状态的用户发送来的信息sckServer_DataArrival 过程处理客户端
传来的数据。当有数据发送过来后,服务器首先接收数据,调用自定义过程HandleOth-
erMessage 检查是谈话内容还是其它信息,如果是其它信息,则在HandleOtherMessage
中进行处理,否则在本过程中进行处理。
因为Winsock 控件将数据首先送至缓冲区,待缓冲区满才发送信息,这显然不能保
证适时对话,用Doevents 语句可确保Windows 将数据及时送出。其中的错误处理程序
处理当远程计算机非正常关闭程序时产生的错误,因为此时服务器并不知道它已关闭,
仍然向它发送信息,这样就会产生错误,导致服务程序关闭,中断整个谈话。处理方法
只是简单地关闭掉该连接即可。
关闭客户连接sckServer_Close 过程关闭与客户的连接,删除控件,收回系统资源,
将该位置的连接状态设置为假,以便有用户请求连接时继续使用。它一般由
HandleOtherMessage 过程调用。
2.
客户端
客户端程序启动时首先设置服务器的地址及端口,这里我直接使用了“192.168.1.8
6”,这是我的服务器地址,可以在Form_load 过程中设置你自己的服务器地址,也可在
程序开始时让用户输入服务器地址以增加灵活性。时钟控件用以与远程节点进行自动连
接。
客户程序主要对象设置
“”显示所有正在聊天室中的用户名显示当前的状态(用户名,IP 地址及是否密谈)。
与服务器程序一样,这里列出的并非全部的控件,但是已经足以完成工作。客户程序中
的自定义类MyMessage 用来记录自己的信息。
类中的变量cmdExitClick 用来记录用户是否按了退出按钮,如果是按了退出按钮
则为真。当用户选择了系统的窗体关闭菜单而没有按退出按钮时将会产生错误,因此用
它来记录是如何退出的,如果选择了系统的窗体关闭菜单,则执行一次cmdExit_Click
()过程,以确保无误。
客户退出时,不是简单地关闭自己的Winsock 控件,而是发送一个字符串(我采用
了一个大家在聊天时很难用到的字符串“=_RE”)给服务器,表明自己要退出,由服务
器端关闭连接,进而关闭自身。
剩余11页未读,继续阅读
资源评论
奔跑的朱亚文
- 粉丝: 0
- 资源: 4万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功