vb socket通信 大文件端口上传(1)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tuzi_xz/article/details/3904489

今天我们来分享一下通过winsock控件,端口传输文件,以及如何确定传输完成标志。

文件传输完成标志的确定是通过三次握手来确定的,首先,客户端现将文件的长度发送给服务器端,当服务器端受到文件长度之后,进入接受文件状态,同时返回一个“send”信号给客户端。当客户端受到“send”后,再将文件发送服务器。服务器通过接收数据的大小来计算文件是否发送完毕。下面让我们来看一下代码吧。

客户端:

Private Sub Command1_Click()
FileName = "D:/nan/0046929.zip"‘这个是要传的文件路径
Dim FreeF As Integer '/'空闲的文件号
Dim LenFile As Long '/'文件的长度
'Dim bytData() As Byte '/'存放数据的数组
FreeF = FreeFile() '/'获得空闲的文件号
Open FileName For Binary As #FreeF '/'打开文件
'DoEvents
LenFile = LOF(FreeF)

Dim lenstr As String
lenstr = "str" & LenFile
sckclient.SendData lenstr
Close #FreeF
End Sub

 

Private Sub cmdSend_Click()
Const iMax = 8192
FileName = "D:/nan/0046929.zip"
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 '/'关闭文件
sckclient.SendData bytData '/'发送数据
Exit Sub
End If
Do Until (iPos >= (LenFile - iMax)) '/'发送整块数据的循环
ReDim bytData(1 To iMax)
Get #FreeF, iPos + 1, bytData
sckclient.SendData bytData
iPos = iPos + iMax '/'移动iPos,使它指向下来要读的数据
Loop
'/'这里要注意的是,必须检查文件有没有剩下的数据,如果文件大小正好等于数据块大小的
'/' 整数倍,那么就没有剩下的数据了
ReDim bytData(1 To LenFile - iPos) '/'发送剩下的不够一个数据块的数据
Get #FreeF, iPos + 1, bytData
sckclient.SendData bytData
Close #FreeF
End Sub

 

Private Sub sckclient_DataArrival(ByVal bytesTotal As Long)
Dim ss As String
sckclient.GetData ss
If ss = "send" Then
Text1.Text = Text1.Text & ss
Call cmdSend_Click
End If
End Sub

展开阅读全文

没有更多推荐了,返回首页