通过特定指令和Exit Sub实现单Winsock多客户端文件传输
Posted by Woodu under 外面有谁?
今天实在太懒了,直接扔核心代码。这段代码通过期间的指令就可以完成单Winsock完善任何文件传输。配合那个Yanshi函数可以控制cpu和内存占用率了///惯例,优化版本不扔
Private Sub Sock_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Rem 提示
'Type recivefile
' startrecive As Boolean
' startfilename As Boolean
' FileName As String
' startfiledata As Boolean
' endl As Boolean
'End Type
'Type strrec
' startstr As Boolean
' str As String
'End Type
'Private file() As recivefile
'Private str() As strrec
Rem 前提是不是0,凡是传输到0的一概抛弃掉
If Index <> 0 Then
ReDim tempdata(bytesTotal)
Sock(Index).GetData tempdata()
Dim tempstr As String
tempstr = CStr(tempdata())
If Len(CStr(tempdata())) * 2 < 512 Then
Dim tmpx As Long
tempstr = ""
For tmpx = 0 To UBound(tempdata)
tempstr = tempstr & Chr(tempdata(tmpx))
Next
End If
Rem 第一个字符串是个什么玩意?
Select Case tempstr
Case "String":
Rem 字符串处理入口
str(Index).startstr = True
Exit Sub
Rem 字符串第一阶段结束
Case "Data":
Rem 文件接收入口
file(Index).startrecive = True
Exit Sub
Case "FileName":
Rem 文件名接收入口
file(Index).startfilename = True
Exit Sub
Case "StartFile":
Rem 文件数据
file(Index).startfiledata = True
Exit Sub
Case "EOFFile":
file(Index).startfiledata = False
'Close Index
Close Index
Exit Sub
Rem 文件接收第一阶段结束
''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''警报!!'''''''''''''''''
''''''''Rem 设置传输构思中ing~''''''''''''
'''''''''''''''''警报!!'''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''
Case "Config":
''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''警报!!'''''''''''''''''
''''''''Rem 设置传输构思中ing~''''''''''''
'''''''''''''''''警报!!'''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''
Rem 第二阶段入口
Case Else:
If str(Index).startstr Then
str(Index).str = tempdata()
Rem 字符串接收入口,写入到文件中,其中,目录名称会在保存中出现
Open "C:\aaa\" & Index & ".txt" For Append As Index
Print #1, str(Index).str
Close Index
txtLog = txtLog & vbCrLf & "收到新的消息。由" & Index & "号终端发送。已经保存在" & "C:\aaa\" & Index & ".txt。"
str(Index).startstr = False
Rem 关闭接收符号
Rem 字符串接收结束
Else
If file(Index).startrecive Then
Rem 文件接收入口
If file(Index).startfilename Then
tempstr = ""
For tmpx = 0 To UBound(tempdata)
tempstr = tempstr & Chr(tempdata(tmpx))
Next
file(Index).FileName = CStr(tempstr)
file(Index).FileName = Base64Decode(file(Index).FileName)
Rem 文件名接口结束
Open "C:\aaa\" & file(Index).FileName & ".file" For Binary Access Write As Index
file(Index).startfilename = False
Exit Sub
Else
If file(Index).startfiledata Then
Put Index, , tempdata()
End If
End If
End If
End If
End Select
End If
End Sub
评论关闭
