




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一节:Winsock控件的介绍Winsock控件的作用简单说就是可以用于两台或多台机器间通信,这里不多说这个控件的作用了,因为在以后的介绍中我们会了解到这个控件的强大功能的,如可以用来做聊天软件等废话不多说,来看看他有些什么重要的属性、方法和事件吧!在VB6.0中的工具箱里默认情况下是没有这个控件的,添加方法如下:在工具箱上右击,选择部件,然后在部件对话框中选择Microsoft Winsock Control 6.0,后确定即可。如果没有这个复选框的话,请点击浏览按钮后在打开的添加ActiveX控件对话框选择MSWINSCK.ocx后选择打开,再点确定即可。Winsock控件在工具箱中图标为。Winsck的主要属性:属性名说明BytesReceived返回接收的数据,可以用GetData方法来获取它LocalHostName返回本机名LocalIP返回本机IPLocalPort返回或设置本机所用的端口,如果为0则为随机产生Protocol返回通信所用的协议RemoteHostName返回通信对方的计算机名RemoteHostIP返回通信对方的IPState返回Winscok的当前状态,取值如下 sckClosed(常量为0):关闭状态 sckOpen(常量为1):打开状态 sckListening(常量为2):侦听状态 sckConnectionPending(常量为3):连接状态 sckResolvingHost(常量为4):解析主机中 sckHostResolved(常量为5):已解析主机 sckConnecting(常量为6):正在连接 sckConnected(常量为7):已经连接 sckClosing(常量为8):客户端正在关闭 sckError(常量为9):连接发生错误 Winsock的主要方法:方法名作用listen使服务器程序处于侦听状态,等待客户端的连接请求connect用于客户端向远程发送一个连接请求,语法:Winsock.connect IP,PortAccept用于服务器接收一个远程客户端的连接请求,语法:Winsock.Accept requestIDsendData用于向远程发送数据,语法:Winsock.sendData 数据getData用于接收远程发送来的数据,语法:Winsock.getData 变量Close关闭通信Winsock的主要事件:事件名说明Connect当服务器接收客户端请求时,服务端发生的事件DataArrival有数据到达时发生的事件,可以在这个事件中来getData发送来的数据ConnectionRequest客户端用Connect方法时服务器发生的事件,可以在这个事件中来Accept一个连接请求SendProgress发送数据中发生的事件,可以在这个事件中来标示当前已经发送多少数据SendComplete发送数据完成发生的事件Error通信发生错误时发生的事件Close关闭通信时发生的事件这节我们详细介绍了Winsock控件的属性、方法和事件等,只要拥有这些,我们就可以编很多功能强大的软件了。在接下来的几课中我们将以实例来说明Winsock的应用。第二节:Winsock聊天器实例上一节我们介绍了Winsock控件,这节我们将以一个聊天器的实例来说说如何应运Winsock控件进行计算机之间的通信。我也做了一个聊天器,程序点击这里下载。这节课我们做了用于通信的服务端和客户端,在制作他们之前,先看看服务端和客户端是如何设计的:(注:要复制本页代码时要注意去掉不正确的字符如?号)服务端的设计:1、设置好localPort作为侦听端口2、使用listen使服务端处在侦听状态3、客户端发出连接请求后触发ConnectionRequest事件4、在ConnectionRequest中用Accept方法来接收客户端的连接请求5、收发数据客户端的设计:1、设置RemoteHost,即你要连接IP2、设置好RemotePort,即通信的端口号,要与服务端的一致3、使用Connect方法向服务端发出连接请求4、如果服务端同意连接请求则触发Connect事件5、收发数据服务端的制作:界面如下:服务器设计第一、二步的实现(窗体的Load事件):Private Sub Form_Load() wskServer.LocalPort = 1024 1、设置好localPort作为侦听端口 wskServer.Listen 2、使用listen使服务端处在侦听状态End Sub服务器设计第三、四步的实现(Winsock的Connect):Private Sub wskServer_ConnectionRequest(ByVal requestID As Long) If wskServer.State sckClosed Then wskServer.Close 这里要先关闭,要不会报错 wskServer.Accept requestID 4、在ConnectionRequest中用Accept方法来接收客户端的连接请求 End IfEnd Sub服务器设计第五步的实现:Private Sub cmdSend_Click() wskServer.SendData txtMessage.Text 发送数据 txtContent.Text = vbCrLf & txtContent.Text & 我说: & txtMessage.Text 加到聊天记录中 txtContent.Text= End SubPrivate Sub wskServer_DataArrival(ByVal bytesTotal As Long) Dim tempS As String wskServer.GetData tempS 接收数据 txtContent.Text = txtContent.Text & 对方说: & tempS & vbCrLf 加到聊天记录中End Sub将上面的程序生成一个EXE文件(名为:Server.exe),然后新建一个工程以制作客户端。客户端的制作:界面如下:客户端设计第一、二、三步的实现:Private Sub cmdConnect_Click() Dim IP As String IP = InputBox(请输入要连接的IP, 输入的IP, ) 连接的IP默认为本机 wskClient.RemoteHost = IP 1、设置RemoteHost,即你要连接IP wskClient.RemotePort = 1024 2、设置好RemotePort,即通信的端口号,要与服务端的一致 wskClient.Connect 3、使用Connect方法向服务端发出连接请求 cmdConnect.Enabled = FalseEnd Sub客户端设计第五步的实现(发送和接收代码和服务器一致,只不过控件名不同而已):Private Sub cmdSend_Click() wskClient.SendData txtMessage.Text 发送数据 txtContent.Text = vbCrLf & txtContent.Text & 我说: & txtMessage.Text 加到聊天记录中 txtContent.Text= End SubPrivate Sub wskClient_DataArrival(ByVal bytesTotal As Long) Dim tempS As String wskClient.GetData tempS 接收数据 txtContent.Text = txtContent.Text & 对方说: & tempS & vbCrLf 加到聊天记录中End Sub生成EXE文件(名为:Client.exe)。这样一个聊天器就做好了,在本机也可以试试,运行方法是先打开Server.exe,后打开Client.exe,然后在Client.exe点击连接按钮,连接地址为,确定,然后在下面的文本框输入内容点发送按钮即可。在建立连接后Server.exe的操作方法和Client.exe的操作方法一样。试试吧!最后说一句:实际上我们会发现这样的聊天器怎么会分为两个部份呢,这样多不方便。实际上我们可以合成一个,即在一个窗体上放一个wskServer再放一个wskClient,这样就OK了,这里是为了更好的说明就放分成两个的。还有就是这个聊天器是基于TCP协议,这个协议保证了通信的数据不会丢失,这个协议只能一对一,但在实际中我们聊天的对象不会是一个人吧,这样就要用到可以一对多但不保证数据能完全到达UDP协议了,简单而言TCP用于一对一,而UDP可以运用于一对多。下一节我们将介绍用Winsock制作一个简单的Web服务器。第三节:Winsock制作Web服务器在本节中,我们将制作一个简单的Web服务器(点击这里下载源文件)。按上节的说法,我们可以把Web服务器看是一个服务端,而浏览器则是一个一个的客户端,他们以一个相同的端口(如HTTP默认为80,FTP默认为21),所以就能通信。他们的工作流程大概如下:首先Web服务器在某一端口上等待浏览器的连接,然后浏览器向目标Web服务器发出要求浏览某一网页的请求,最后Web服务根据请求发送相应的网页源文件给浏览器。用过ASP的都知道,我们有一个Web服务器叫IIS,这个服务器就是根据浏览器的请求而产生相应的源码然后发送到用户的浏览器上的。别的不多说,界面很简单:将文本框设置可以显示多行文本。为了有别于其他,我们这个Web服务器将使用端口124。制作流程如下:在Form_Load事件中将服务器的侦听端口设为124:Private Sub Form_Load() wskServer.LocalPort = 124 wskServer.ListenEnd Sub在wskServer的ConnectionRequest事件中接受客户端(浏览器)的连接:Private Sub wskServer_ConnectionRequest(ByVal requestID As Long) If wskServer.State sckClosed Then wskServer.Close End If wskServer.Accept requestIDEnd Sub在wskServer控件的DataArrival事件中加当浏览器的请求文本来时发送源代码过去:Private Sub wskServer_DataArrival(ByVal bytesTotal As Long) Dim tempS As String wskServer.GetData tempS txtMain.Text = tempS txtMain.Text = txtMain.Text & 一个IP为 & wskServer.RemoteHostIP & 连接对象 & vbCrLf sendCode (index.htm)End Sub这里在窗体模块(窗体声明)中加入一个发送源代码的sendCode的Sub过程:Sub sendCode(fileName As String) Open App.Path & & fileName For Input As #1 Dim tempS As String Do While Not EOF(1) Line Input #1, tempS wskServer.SendData tempS Loop Close #1End Sub在cmdClose的Click事件中关闭窗体和服务:Private Sub cmdClose_Click() wskServer.Close Unload Me EndEnd Sub最后要在wskServer的SendComplete事件中加入如下代码:Private Sub wskServer_SendComplete()wskServer.CloseEnd Sub这里制作好了,将工程文件保存在C:temp文件夹中,然后自己做一个网页名为index.htm也放在C:temp中。这时按F5运行,然后打开IE,输入::124,这下等网页的显示吧。这只是一个简单的Web服务器,只能给你们说明一些原理,下面说几个问题:1、我们如何知道客户端要的是哪个文件:实际上我们给Web服务器发送连接会有一个文本请求来说明自己要的是什么文件,比如你把上面的wskServer的DataArrival事件中的前三行取消注释,再次按上面的方法来运行一次,不过这次把请求网址改为:/1.htm,那么文本框中会显示浏览器的请求文本为(以我的浏览器为例):GET /1.htm HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*Accept-Language: zh-cnAccept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)Host: :124Connection: Keep-Alive你看第一行就知道客户端要的是什么文件了。2、为什么在wskServer的SendComplete事件中要关闭服务器:回答这个问题你可以将wskServer.Close注释起来再次运行,你会发现要很久(或要刷新网页)才会有页面出现,这是因为如果服务一直在的话,那么浏览器以为服务的数据没有传完,就一直等待,所以要在传送完源代码时关闭服务器。3、能不能用Winsock做自己的浏览器:能。我们可以用Winsock下载网页的源代码,但在VB中我们有另一个功能更强大的控件来做我们的浏览器,将在下节中说明具体的做法。第四节:Winsock制作多客户服务器 我们前面的程序都只说到使用Winsock制作一对一的连接,实际上我们使用控件数组的话,那么可以制作一个多客户连接的服务器。不过本质上还是一对一,不过是服务器上不只一个Windsock而已。我们在窗体上放一个Winsock,将他的Name改为sckServer,index属性改为0。然后就是代码了:clientCount As Integer 定义一个窗体级变量来记录客户的连接数。Private Sub Form_Load() clientCount = 0 sckServer(0).LocalPort = 2000 设置好侦听端口 sckServer(0).Listen 开始侦听 End Sub Private Sub sckServer_ConnectionRequest (Index As Integer, ByVal requestID As Long) If Index = 0 Then clientCount = clientCount + 1 客户请求多一个 Load sckServer(clientCount) 载入一个服务端为新增的客户服务 sckServer(clientCount).LocalPort = 0 侦听端口为随机,不能设为2000,因为有sckServer(0)在使用了。 sckServer(clientCount).Accept requestID 接受请求 End If End Sub看了代码明白了吧,所谓多客户服务器就是多个Winsock服务端在为客户服务而已,当然我们不用同步的时候也可以用一个Winsock来连续的关闭、连接来做多客户服务器也是可以的。第五节:Web浏览器控件在VB6.0中Web浏览器控件是WebBrowser,他的作用是让我们只要加入少量的代码,就能做出和IE功能一样强大的浏览器。(点击这里下载我制作的浏览器示例)将WebBrowser添加到工具箱方法是:添加部件中选择Microsoft Internet Controls(SHDOCVW.dll),后点确定,WebBrowser在工具箱的图标为:WebBrowser的功能强大是由众多方法、属性和行为组成的,下面说下它的主要属性、方法和行为。WebBrowser的主要属性:属性名说明LocationURL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年九年级历史下册 第二单元 凡尔赛-华盛顿体系下的世界 第3课 凡尔赛-华盛顿体系说课稿 新人教版
- 2025智能交通平台渠道代理合同
- 机械厂员工转正结果管理办法
- 2025杭州市房屋租赁合同范本
- 2025年农业种植合同范本B
- 《大堰河-我的保姆》《秦腔》教学设计 2023-2024学年统编版高中语文选择性必修下册
- 第3课 色彩斑斓水彩画教学设计-2023-2024学年小学信息技术(信息科技)五年级下册人教·内蒙古版
- HZL54河南电建汽车产业园土地租赁及建设合同
- 电力改造项目安全责任免除合同范本
- 海外电子商务合同跨境法律适用及风险防范策略
- 辽宁省沈阳市2024-2025学年八年级上学期期末考试英语试题(含答案无听力原文及音频)
- 小班晨间活动体能大循环
- 绿化小型工程合同范例
- 涂层材料与叶轮匹配性研究-洞察分析
- 讯问笔录课件教学课件
- 《建筑工程设计文件编制深度规定》(2022年版)
- 2.3地表形态与人类活动课件湘教版(2019)高中地理选择性必修一
- 病例报告表(CRF)模板
- 辽宁省名校联盟2024-2025学年高三上学期10月联考数学试卷
- 广东省珠海市香洲区文园中学2024-2025学年七年级上学期10月月考数学试卷(无答案)
- 2019年医疗器械体外诊断与病理诊断行业分析报告
评论
0/150
提交评论