在VBA中调用winsock控件
2015-06-19 15:59
537 查看
如果系统没有Winsock控件的话,可以下载下面的控件MSWINSCK.OCX,然后将该文件复制到C:\Windows\System32目录下。
在VBE窗口中,从菜单“工具”->“引用”中,点击“浏览”按钮,选择MSWinSCK.ocx文件,再从“工具箱”的“附加控件”中选择Microsoft Winsock Control。
此时使用Winsock控件的话,将会出现提示不安全的ActiveX控件的提示。可以点击同时下载的REG文件注册该控件即可。
zudhVJHh.rar (48.41 KB, 下载次数: 495)
一般在Excel的窗体中添加Winsock控件。
使用Winsock控件的应用程序一般是Client/Server结构,也就是客户端/服务器端。
以服务端为例,一般的步骤是:
先设置LocalPort本地端口,然后使用Listen方法侦听数据请求。然后处理ConnectionRequest和DataArrival事件。使用完后使用Close方法关闭连接。
Private Sub UserForm_Initialize()
Winsock1.LocalPort = 1999
Winsock1.Listen
End Sub
Private Sub UserForm_Terminate()
Winsock1.Close
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
If Winsock1.State <> sckClosed Then Winsock1.Close
Winsock1.Accept requestID
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Buffer() As Byte
TransferedBytes = TransferedBytes + bytesTotal
ReDim Buffer(bytesTotal - 1)
Winsock1.GetData Buffer, vbArray + vbByte
End Sub
Private 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:" & Description
End Sub
而客户端的一般步骤如下:
设置远程服务器端口RemotePort属性,然后使用Connect方法连接。处理ConnectionRequest和DataArrival事件。发送数据就直接使用Send方法就可以了,可以发送字符串或者Byte数组。
Private Sub UserForm_Initialize()
Winsock1.RemoteHost = "127.0.0.1"
Winsock1.RemotePort = 2999
Winsock1.Connect
End Sub
Private Sub UserForm_Terminate()
Winsock1.Close
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
If Winsock1.State <> sckClosed Then Winsock1.Close
Winsock1.Accept requestID
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
Winsock1.GetData strData, vbString
If strData = "OK" Then
Winsock1.Close
Winsock1.RemotePort = 1999
Winsock1.Connect
MsgBox "You can send file now"
End If
End Sub
在VBE窗口中,从菜单“工具”->“引用”中,点击“浏览”按钮,选择MSWinSCK.ocx文件,再从“工具箱”的“附加控件”中选择Microsoft Winsock Control。
此时使用Winsock控件的话,将会出现提示不安全的ActiveX控件的提示。可以点击同时下载的REG文件注册该控件即可。
zudhVJHh.rar (48.41 KB, 下载次数: 495)
一般在Excel的窗体中添加Winsock控件。
使用Winsock控件的应用程序一般是Client/Server结构,也就是客户端/服务器端。
以服务端为例,一般的步骤是:
先设置LocalPort本地端口,然后使用Listen方法侦听数据请求。然后处理ConnectionRequest和DataArrival事件。使用完后使用Close方法关闭连接。
Private Sub UserForm_Initialize()
Winsock1.LocalPort = 1999
Winsock1.Listen
End Sub
Private Sub UserForm_Terminate()
Winsock1.Close
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
If Winsock1.State <> sckClosed Then Winsock1.Close
Winsock1.Accept requestID
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Buffer() As Byte
TransferedBytes = TransferedBytes + bytesTotal
ReDim Buffer(bytesTotal - 1)
Winsock1.GetData Buffer, vbArray + vbByte
End Sub
Private 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:" & Description
End Sub
而客户端的一般步骤如下:
设置远程服务器端口RemotePort属性,然后使用Connect方法连接。处理ConnectionRequest和DataArrival事件。发送数据就直接使用Send方法就可以了,可以发送字符串或者Byte数组。
Private Sub UserForm_Initialize()
Winsock1.RemoteHost = "127.0.0.1"
Winsock1.RemotePort = 2999
Winsock1.Connect
End Sub
Private Sub UserForm_Terminate()
Winsock1.Close
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
If Winsock1.State <> sckClosed Then Winsock1.Close
Winsock1.Accept requestID
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
Winsock1.GetData strData, vbString
If strData = "OK" Then
Winsock1.Close
Winsock1.RemotePort = 1999
Winsock1.Connect
MsgBox "You can send file now"
End If
End Sub
相关文章推荐
- VBA创建文件夹
- Vbox全屏问题
- 【请教】VLC 0.9.4中的VLCPlugin1控件为什么不显示视频?
- 如何通过VB6.0编程的方式获取百度贴吧帐号的BDUSS
- Excel VBA TextBox控件的滚动条不能刷新
- powerdesigner vba 创建表和列
- 运行vb写的程序,有些电脑上会弹出一个与office相关的窗口
- VB.net学习笔记(十四) 反射、多态
- 变量、数组、集合、泛型的发展
- VB 6.0 - the first day
- VB 里常用的延时方法
- VB Strings
- VB Structures
- VB|xp风格:终于解决了“图片优化软件”在部分xp系统上无法启动的问题。
- VB: 再次使用的体会
- Vb.net/VB 声明API功能父窗口功能
- 【VB】删除MSHFlexGrid控件中一行(机房问题)
- 【VB】MDI子窗体显示(机房问题)
- 【VB】打开原机房(机房问题)
- 【VB】学生信息管理系统优化总结