先写上传送和接收文件的过程
Public Sub SendFile(FileName As String, WinS As Winsock)
'FileName 为要传送的文件名,WinS为发送文件的WinSock控件
Dim FreeF As Integer '空闲的文件号
Dim LenFile As Long '文件的长度
Dim bytData() As Byte '存放数据的数组
FreeF = FreeFile '获得空闲的文件号
Open FileName For Binary As #FreeF '打开文件
DoEvents
LenFile = LOF(FreeF) '获得文件长度
If LenFile <= iMax Then '如果要发送的文件小于数据块大小,直接发送
ReDim bytData(1 To LenFile) '根据文件长度重新定义数组大小
Get #FreeF, , bytData '把文件读入到数组里
Close #FreeF '关闭文件
WinS.SendData bytData '发送数据
Exit Sub
End If
'文件大于数据块大小,进行分块发送
Do Until (iPos >= (LenFile - iMax)) '发送整块数据的循环
ReDim bytData(1 To iMax)
Get #FreeF, iPos + 1, bytData
WinS.SendData bytData
iPos = iPos + iMax '移动iPos,使它指向下来要读的数据
Loop
'这里要注意的是,必须检查文件有没有剩下的数据,如果文件大小正好等于数据块大小的
' 整数倍,那么就没有剩下的数据了
ReDim bytData(1 To LenFile - iPos) '发送剩下的不够一个数据块的数据
Get #FreeF, iPos + 1, bytData
WinS.SendData bytData
Close #FreeF
下面是接收端的程序:
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim bytData() As Byte
Dim lLenFile As Long
Dim f
f = FreeFile
Open strFileName For Binary As #f 'strFileName是文件名
lLenFile = LOF(f)
ReDim bytData(1 To bytesTotal)
Winsock1.GetData bytData
If lLenFile = 0 Then 'lLenFile=0表示是第一次打开文件,这里有个问题,就是'如果如果该文件存在的话,就会出错,应该在打开前检查文件是否存在。(这里我省略了)
Put #f, 1, bytData
Else
Put #f, lLenFile + 1, bytData
End If
Close #f
End Sub
现在文件已经夏至服务器上的硬盘上了,再打文件转存到数据库中就OK了,这部分就不说了!~
下面写上WINSOCK的常用属性,事件
属性
-------------------------------------------------------------------------
LocalHostName | 本地机器名
LocalIP | 本地机器IP地址
LocalPort | 本地机器通信程序的端口(0<端口<65536)
RemoteHost | 远程机器名
RemotePort | 远程机器的通信程序端口
state | 连接的当前状态(文后有详细说明)
Protocal | 使用TCP或UDP协议(这里我们选‘0-sckTCPProtocal’)
--------------------------------------------------------------------------
*方法
--------------------------------------------------------------------------
Listen
Listen方法用于服务器程序,等待客户访问。
格式:Winsock对象.listen
Connect
Connect方法用于向远程主机发出连接请求
格式:Winsock对象.connect [远程主机IP,远程端口]
Accept
Accept方法用于接受一个连接请求
格式:Winsock对象.accept Request ID
Senddata
此方法用于发送数据
格式:Winsock对象.senddata 数据
Getdata
用来取得接收到的数据
格式:Winsock对象.getdata 变量 [,数据类型 [,最大长度]]
Close
关闭当前连接
格式:Winsock对象.close
*事件
----------------------------------------------------------------------------
Close | 远程机器关闭连接时触发
Connect | 连接建立好,可以进行通信时触发(客户端)
ConnectRequest | 有请求连接到达时产生(服务器端)
DataArrival | 有数据到达时触发
Error | 发生错误时发生
SendProgress | 数据传送进度