ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:30.48KB ,
资源ID:26405615      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/26405615.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Visual Basic 6 中使用WinSock深入浅出.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Visual Basic 6 中使用WinSock深入浅出.docx

1、Visual Basic 6 中使用WinSock深入浅出VB中使用WinSock控件编写网络程序WinSock控件能够通过UDP协议(用户数据报协议)或TCP协议(数据传输协议)连接到远程的机器并进行数据交换。这两种协议都能用来创建客户端和服务端应用程序。就像定时器控件一样,WinSock控件运行时没有一个可视的界面。可能的用途创建客户端应用程序,它能在信息到达中央服务器之前把用户的信息收集起来。创建服务端应用程序,它能作为来自多个用户的数据一个集中处理点。创建“聊天”程序。协议的选择当我们使用WinSock控件时,首先要确定的是使用TCP还是UDP协议。它们之间主要的区别在于连接状态:TC

2、P协议控件是一个基于连接的协议,就像电话机一样,用户必须在通话之前建立连接;UDP是一个无连接的协议,两台计算机之间的事务处理就像传纸条一样:一台计算机向另一台计算机发送消息,但是它们之间并没有一个明确的连接路径。另外,发送的单个信息量的大小取决于网络。通常,你要创建的应用程序的类别就决定了你要选择的协议。以下是几个能够帮助你选择合适的协议的问题:当发送或接收数据时,该应用程序需要从服务端或客户端获得认证吗?如果要的话,那么TCP协议就正好需要在发送或接受数据前建立明确的连接。要发送的数据量大吗?(就像图片、声音文件之类)一旦建立了连接,TCP协议就会保持连接并保证数据的完整性。但是,这种连接

3、会占用的更多的处理器资源,成本也会更高一些。数据是陆续传输的,还是一次全部传完呢?比如,如果你要创建的应用程序在某些任务完成时会告知具体的计算机,那么选择UDP协议会更合适一些。UDP协议也更适合于发送小量数据。协议的配置配置你的应用程序所用到的协议:在设计阶段,单击工具窗口里的协议,选择sckTCPProtocol或sckUDPProtocol。你也可以在代码里配置协议,就像下面这样:Winsock1.Protocol=sckTCPProtocol确定你的计算机名要连接到远程的计算机,你必须知道它的IP地址或别名。IP地址是一串用句点分隔的3位数字。通常,计算机的别名更容易让人记住。按下面的

4、步骤可以找到你的计算机名:在“任务栏”里单击“开始”在“设置”选项里单击“控制面板”;双击“网络”图标;单击“网络标识”在“计算机名”中显示的就是你的计算机名。一旦你找到你的计算名,它就可以作为远程主机的属性来用了。TCP连接入门当用TCP控件创建应用程序的时候,必须首先明确你的程序是作为服务端还是客户端。创建服务端程序就意味着你的程序能够在指定的端口进行“监听”,而客户端则能够提出请求,服务端能够接受请求并实现连接。一旦连接建立起来,客户端和服务端就能够自由地进行通信。创建服务端程序下面是创建一个简单服务端程序的步骤:创建一个标准EXE工程;把默认窗体(Default form)的名字改为f

5、rmServer;把form的标题(caption)改为TCP Server;把Winsock控件拉到窗体中,并命名为tcpServer;在窗体中添加2个文本框,分别命名为txtSendData和txtOutput在窗体中加入下列代码;Private Sub Form_Load() Set the LocalPort property to an integer. Then invoke the Listen method.tcpServer.LocalPort = 1001tcpServer.Listen frmClient.Show Show the client form.End Sub

6、 Private Sub tcpServer_ConnectionRequest _(ByVal requestID As Long) Check if the controls State is closed. If not, close the connection before accepting the new connection.If tcpServer.State sckClosed Then _tcpServer.Close Accept the request with the requestID parameter.tcpServer.Accept requestIDEnd

7、 SubPrivate Sub txtSendData_Change() The TextBox control named txtSendData contains the data to be sent. Whenever the user types into the textbox, the string is sent using the SendData method.tcpServer.SendData txtSendData.TextEnd SubPrivate Sub tcpServer_DataArrival _(ByVal bytesTotal As Long) Decl

8、are a variable for the incoming data. Invoke the GetData method and set the Text property of a TextBox named txtOutput to the data.Dim strData As StringtcpServer.GetData strDatatxtOutput.Text = strDataEnd Sub上面就是创建一个简单的服务端应用程序的过程。然而,要完成整个过程,你还得创建一个客户端程序。创建TCP客户端程序在工程中添加一个新的窗体(form),并命名为frmClient;将窗体

9、的标题(caption)改为TCP Client;添加一个Windsock控件到窗体中,命名为tcpCllient;添加2个文本框控件到frmClient窗体,分别命名为txtSend和txtOutput;添加一个按钮控件(CommandButton)到窗体,命名为cmdConnecti;将按钮控件标题(caption)改为Connect;在窗体中添加下面代码:注:确保将远程主机属性(RemoteHost property)改为你的计算机别名。Private Sub Form_Load() The name of the Winsock control is tcpClient. Note:

10、to specify a remote host, you can use either the IP address (ex: 121.111.1.1) or the computers friendly name, as shown here.tcpClient.RemoteHost = RemoteComputerNametcpClient.RemotePort = 1001End SubPrivate Sub cmdConnect_Click() Invoke the Connect method to initiate a connection.tcpClient.ConnectEn

11、d SubPrivate Sub txtSendData_Change()tcpClient.SendData txtSend.TextEnd SubPrivate Sub tcpClient_DataArrival _(ByVal bytesTotal As Long)Dim strData As StringtcpClient.GetData strDatatxtOutput.Text = strDataEnd Sub以上代码就能创建一个简单的客/服应用程序。要试着让两者建立连接,可以运行工程,单击Connect。在任意一个txtSendData文本框中输入文本,同样的文本信息就会出现在另

12、一个窗体的txtOutput文本框中出现。接受多个连接请求上面介绍的服务端程序智能接受一个连接请求。但是,通过创建一组控件,并使用同样的控件来接受多个连接请求也是可能的。在这种情况下,你不需要关闭连接,只要创建新的控件实例(通过配置它的索引属性),调用新的实例中的接受方法。下面的代码中,假定在一个叫sckServer的窗体中有一个Winsock控件,它的索引属性设置为0。这样这个控件就是控件数组的一部分。在声明段中,生命一个模块级变量intMax。在窗体的载入事件中,intMax被设置为0,数组中第一个控件的本地端口属性被设置为1001。监听方法在控件中被调用,它被作为“监听控件”。每个连接请

13、求到来时,代码会测试看它的索引(Index)是否为0(监听控件的值),如果是0,监听控件中intMax值增1,并用这个值创建新的控件实例。新的控件实例被用来接受连接请求。Private intMax As LongPrivate Sub Form_Load()intMax = 0sckServer(0).LocalPort = 1001sckServer(0).ListenEnd SubPrivate Sub sckServer_ConnectionRequest _(Index As Integer, ByVal requestID As Long)If Index = 0 ThenintM

14、ax = intMax + 1Load sckServer(intMax)sckServer(intMax).LocalPort = 0sckServer(intMax).Accept requestIDLoad txtData(intMax)End IfEnd SubUDP连接入门创建一个UDP应用程序比创建TCP程序更简单,因为UDP协议不需要一个确定的连接。在上面的TCP应用程序中,其中一个Winsock控件必须明确的被设置为“监听”,而另一个必须用连接方法发起连接。相反,UDP协议不需要明确的连接。要在2个控件之间传送数据,(连接的双方)必须完成三个步骤:确定远程主机属性为对方的计算机

15、名;确定远程主机属性为第二个控件的本地端口属性;调用约定方法指定要被使用的本地端口。(下面将详细讨论该方法)创建一个的UDP连接端创建一个标准EXE工程;将默认窗体命名为frmPeerA;在窗体中添加一个Winsock控件,命名为udpPeerA;在属性(Properties)页,单击协议(Protocol),改为UDPProtocol;添加2个文本框控件窗体中,分别命名为txtSend和txtOutput;在窗体中添加下面代码:Private Sub Form_Load() The controls name is udpPeerAWith udpPeerA IMPORTANT: be su

16、re to change the RemoteHost value to the name of your computer.RemoteHost= PeerB .RemotePort = 1001 Port to connect to.Bind 1002 Bind to the local port.End WithfrmPeerB.Show Show the second form.End SubPrivate Sub txtSend_Change() Send text as soon as its typed.udpPeerA.SendData txtSend.TextEnd SubP

17、rivate Sub udpPeerA_DataArrival _(ByVal bytesTotal As Long)Dim strData As StringudpPeerA.GetData strDatatxtOutput.Text = strDataEnd Sub创建第二个UDP连接端添加标准窗体到工程中;将窗体名改为frmPeerB;将窗体标题改为Peer B;在窗体中添加一个Windsock控件并命名为udpPeerB;在属性页中单击Protocol,改为UDPProtocol;添加2个文本框到窗体中,分别命名为txtSend和txtOutput;在窗体中添加下面代码:Private

18、 Sub Form_Load() The controls name is udpPeerB.With udpPeerB IMPORTANT: be sure to change the RemoteHost value to the name of your computer.RemoteHost= PeerA.RemotePort = 1002 Port to connect to.Bind 1001 Bind to the local port.End WithEnd SubPrivate Sub txtSend_Change() Send text as soon as its typ

19、ed.udpPeerB.SendData txtSend.TextEnd SubPrivate Sub udpPeerB_DataArrival _(ByVal bytesTotal As Long)Dim strData As StringudpPeerB.GetData strDatatxtOutput.Text = strDataEnd Sub关于约定方法上面代码中所涉及的,在创建UDP应用程序时必须调用约定方法。这个约定的方法保留了控件用到的本地端口。例如,当你绑定控件到端口1001时,其他的应用程序都不能用该端口监听。当你希望阻止其他的应用程序使用某端口的时候,这个就很有用。这个约定

20、方法也引起了争议。如果机器里有多个网络适配器,本地IP允许你指定用哪个适配器。如果你忽略了这个争议性问题,控件就会使用计算机控制面板设置中,在网络控制面板对话框里列出的第一个网络适配器。在使用UDP协议时,你可以自由的切换远程主机和远程端口属性,同时保留本地端口范围。但是在使用UDP协议时,你必须在改变远程主机和远程端口属性时关闭连接。共4页。-VB6.0开发网络应用的5个技巧Visual Basic 6.0(以下简称VB 6)以其强大的功能为广大软件开发人员所喜爱,被用来开发各种应用程序。随着Internet的迅猛发展,VB 6在网络方面的应用开发也越来越多。本文介绍笔者在实际编程开发中总结

21、的5个技巧,希望能为进行网络开发的朋友们提供一点参考。连通检测许多应用程序常常需要在程序中直接进行联网操作,以便进行一些必要的处理(如在线注册和在线帮助等),这就要求我们在程序中建立某些连接。很多软件在不知用户是否联网的情况下就启动浏览器查找网址,结果只能查出一错误网页,既浪费用户时间又没有任何效果。如果应用程序在查找网页之前能自动判断用户是否已经联网,就会节约许多时间,提高程序运行效率。下面是实现网络连通检测的VB 6代码:Private Sub Form_Load() If IsConnected = TRUE Then MsgBox (“您已经连通了Internet!”) End If

22、If IsConnected = FALSE Then MsgBox (“您还没有连通 Internet!”) End If End SubOption Explicit /*有关的API声明和定义*/ Public Declare Function RasEnumConnections Lib “RasApi32.dll” Alias “RasEnumConnectionsA” (lpRasCon As Any, lpcb As Long, lpcConnections As Long) As Long Public Declare Function RasGetConnectStatus

23、Lib “RasApi32.dll” Alias “RasGetConnectStatusA” (ByVal hRasCon As Long, lpStatus As Any) As Long/*常数和变量的设定*/ Public Const RAS95_MaxEntryName = 256 Public Const RAS95_MaxDeviceType = 16 Public Const RAS95_MaxDeviceName = 32 Public Type RASCONN95 dwSize As Long hRasCon As Long szEntryName(RAS95_MaxEnt

24、ryName) As Byte szDeviceType(RAS95_MaxDeviceType) As Byte szDeviceName(RAS95_MaxDeviceName) As Byte End Type Public Type RASCONNSTATUS95 dwSize As Long RasConnState As Long dwError As Long szDeviceType(RAS95_MaxDeviceType) As Byte szDeviceName(RAS95_MaxDeviceName) As Byte End Type /*函数IsConnected返回连

25、通的状态,如果为True则表示已连通*/ Public Function IsConnected() As Boolean Dim TRasCon(255) As RASCONN95 Dim lg As Long Dim lpcon As Long Dim RetVal As Long Dim Tstatus As RASCONNSTATUS95 TRasCon(0).dwSize = 412 lg = 256 * TRasCon(0).dwSize RetVal = RasEnumConnections(TRasCon(0), lg, lpcon) If RetVal 0 Then MsgB

26、ox “错误” Exit Function End If Tstatus.dwSize = 160 RetVal = RasGetConnectStatus(TRasCon(0) .hRasCon,Tstatus) If Tstatus.RasConnState = H2000 Then IsConnected = TRUE Else IsConnected = FALSE End If End Function启动拨号网络中的连接 由于拨号网络不是一个可执行文件, 所以要启动拨号网络,需要借助 explorer.exe 。但若是要启动拨号网络中的某一个连接,则要借助rundll.exe 和

27、rnaui.dll两个文件。启动方法如下(假定此连接名称为163):Shell “rundll rnaui.dll,RnaDial 163”,vbNormalFocus上面假定了连接名称,但在实际编程中我们是不知道连接名称的。在窗体上放置一个命令按钮(cmdCallConnect),在其单击事件中进行连接处理。下面的代码介绍如何取得默认的连接名称并启动它:Option Explicit/*有关的API声明*/ Private Declare Function RegOpenKeyEx Lib “advapi32” Alias “RegOpenKeyExA” (ByVal hKey As Lon

28、g, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long Private Declare Function RegQueryvalueEx Lib “advapi32” Alias “RegQueryvalueExA” (ByVal hKey As Long, ByVal lpvalueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByVal szData A

29、s String, ByRef lpcbData As Long) As Long Private Declare Function RegCloseKey Lib “advapi32”(ByVal hKey As Long) As Long/*常数的设定*/ Const HKEY_CURRENT_USER = H80000001 Const ERROR_SUCCESS = 0在命令按钮(cmdCallConnect)中加入如下代码:Private Sub cmdCallConnect_Click() /*启动默认拨号连接*/ Shell “rundll rnaui.dll,RnaDial”

30、GetConnect, vbNormalFocus End Sub/*取得连接的函数(GetConnect)*/ Public Function GetConnect() As String Dim hKey As Long Dim SubKey As String /*主键*/ hKey = HKEY_CURRENT_USER /*子键*/ SubKey = “RemoteAccess” /*取得默认连接名*/ GetConnect=GetRegvalue(hKey,SubKey, “Default”) End Function/*取得注册的函数(GetRegvalue)*/ Public Functio

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1