WEB聊天室的四种实现方案及其比较一、基于ActiveX的聊天室.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《WEB聊天室的四种实现方案及其比较一、基于ActiveX的聊天室.docx》由会员分享,可在线阅读,更多相关《WEB聊天室的四种实现方案及其比较一、基于ActiveX的聊天室.docx(11页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、WEB聊天室的四种实现方案及其比较一、基于ActiveX的聊天室一、基于ActiveX的聊天室基于ActiveX的聊天室其实现过程类似于前文所述的Java聊天室。在返回给客户端的HTML页面里插入ActiveX控件,该ActiveX控件与Web服务器上运行的专用聊天服务程序进行连接,当客户端用户输入新发言时,发言被传送到聊天服务器并由其广播。和Java Applet一样,ActiveX控件实现了实时聊天。在网页上使用ActiveX比用Java Applet具有更快的速度和更大的灵活性。因为ActiveX控件下载后,不需要虚拟机解释而是直接执行,如同本机上的应用程序一样。在网页中你可以嵌入各种A
2、ctiveX控件(如数据表格、多媒体、图形图象、压缩加密等等),可以方便的将传统应用程序轻松的移植到Intranet/Internet上。它所能实现的功能远远超过现有的各种动态网页技术,包括DHTML、CGI、ASP等。不过话又说回来,由于ActiveX能够存取客户机的所有资源,所以安全性成为该技术流行开来的最大障碍。当下载的网页中包含ActiveX控件时,浏览器用户必须确认该控件带有可以信赖的公司的电子签名,才敢放心执行。ActiveX的另一缺陷是它只能运行于Windows平台,而且只同IE浏览器配合较好,对于Netscape的用户来说,必须下载专门的PlugIn才能查看ActiveX网页。
3、我们使用Visual Basic 6来实现聊天服务器和客户端的ActiveX控件。(1)聊天服务器的编写新建一个工程,类型为标准EXE,名字为prjChatServer,将主Form名字改为frmServer,其上放置的控件有:txtLog,类型TextBox,属性MultiLine=TrueScrollBars=VerticalsktChatServer,类型Winsock,属性Index=0cmdExit,类型CommandButtontxtLog用于显示各客户连接信息,sktChatServer为Winsock控件数组,用于处理与各客户的TCP/IP连接,cmdExit按钮则用于退出系统
4、。在frmServer的代码窗口中加入以下代码:Option ExplicitPrivate Const LISTEN_PORT As Integer = 1888监听端口号Private Type ActiveClient_TypeConnected As Boolean是否在连接状态ClientIP As String客户端的IP地址End TypePrivate gClients() As ActiveClient_Type存储所有连接的聊天用户Private Sub AddLog(sMess As String)显示信息txtLog.Text = txtLog.Text + sMess
5、 + Chr(13) + Chr(10)End SubPrivate Sub cmdExit_Click()Unload MeEnd SubPrivate Sub Form_Load()ReDim gClients(0)sktChatServer(0).LocalPort = LISTEN_PORTsktChatServer(0).Listen启动服务器AddLog 聊天服务器启动,端口号为 + CStr(LISTEN_PORT) + .End SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)Di
6、m i As Integer退出时断开所有的连接For i = 1 To UBound(gClients)If gClients(i).Connected ThensktChatServer(i).CloseUnload sktChatServer(i)End IfNextEnd SubPrivate Sub sktChatServer_Close(Index As Integer)AddLog sktChatServer(Index).RemoteHostIP + ( + CStr(Index) + ) + 离开了聊天室.sktChatServer(Index).CloseUnload sk
7、tChatServer(Index)gClients(Index).Connected = FalseBroadCast Index, 离开了聊天室End Sub接受新用户连接服务器请求Private Sub sktChatServer_ConnectionRequest(Index As Integer, ByVal requestID As Long)Dim i As IntegerDim posAs Integer寻找gClients中是否有空闲的位置pos = 0i = 0Do While (pos = 0) And (i UBound(gClients)i = i + 1If Not
8、 gClients(i).Connected Thenpos = iExit DoEnd IfLoop如果没有,则添加一个新的元素If pos = 0 Thenpos = UBound(gClients) + 1ReDim Preserve gClients(pos)End If创建Accept该用户的SocketLoad sktChatServer(pos)sktChatServer(pos).Accept requestIDgClients(pos).Connected = TruegClients(pos).ClientIP = sktChatServer(pos).RemoteHost
9、IPAddLog gClients(pos).ClientIP + ( + CStr(pos) + )进入了聊天室.BroadCast pos, 进入了聊天室End Sub当客户有消息发出时,将该消息进行广播Private Sub sktChatServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)Dim sTemp As StringDim i As IntegersktChatServer(Index).GetData sTemp, vbStringIf UCase(CStr(sTemp) = QUIT Then 用户要
10、求退出sktChatServer_Close IndexElseBroadCast Index, sTempEnd IfAddLog gClients(Index).ClientIP + ( + CStr(Index) + ): + sTempEnd SubPrivate Sub BroadCast(idx As Integer, sMess As String)广播过程Dim i As IntegerFor i = 1 To UBound(gClients)If gClients(i).Connected ThensktChatServer(i).SendData gClients(idx)
11、.ClientIP + ( + CStr(idx) + ): + sMessDoEventsEnd IfNextEnd Sub其工作原理同前文所述的聊天服务器类似,用一个动态数组存储各个聊天用户的连接状态。当新用户连接时,增加一个Winsock控件,即Load sktChatServer(pos),用于同该用户通信。运行时的聊天服务器画面如下图所示:(2)聊天客户端的ActiveX控件的编写新建一个工程,名字为prjChatClient,类型为ActiveX控件。将工程中的用户控件类命名为MyChat。在MyChat用户控件上放置下列控件:txtLog,类型TextBox,属性MultiLin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WEB 聊天室 实现 方案 及其 比较 基于 ActiveX
![提示](https://www.deliwenku.com/images/bang_tan.gif)
限制150内