分享到新浪微博 分享到QQ空间 打印

通过特定指令和Exit Sub实现单Winsock多客户端文件传输

通过特定指令和Exit Sub实现单Winsock多客户端文件传输

我继续杯具。今天第六天
终于写完了。

今天实在太懒了,直接扔核心代码。这段代码通过期间的指令就可以完成单Winsock完善任何文件传输。配合那个Yanshi函数可以控制cpu和内存占用率了///惯例,优化版本不扔
完美排版请参见http://poketb.com/woodu/2010/02/22/738-exit-sub-through-specific-instruction-and-single-winsock-multi-client-file-transfer/


001 Private Sub Sock_DataArrival(Index As Integer, ByVal bytesTotal As Long)  

002 Rem 提示  

003 'Type recivefile  

004 '    startrecive As Boolean  

005 '    startfilename As Boolean  

006 '    FileName As String  

007 '    startfiledata As Boolean  

008 '    endl As Boolean  

009 'End Type  

010 'Type strrec  

011 '    startstr As Boolean  

012 '    str As String  

013 'End Type  

014 'Private file() As recivefile  

015 'Private str() As strrec  

016 Rem 前提是不是0,凡是传输到0的一概抛弃掉  

017 If Index <> 0 Then

018     ReDim tempdata(bytesTotal)  

019     Sock(Index).GetData tempdata()  

020     Dim tempstr As String

021     tempstr = CStr(tempdata())  

022     If Len(CStr(tempdata())) * 2 < 512 Then

023     Dim tmpx As Long

024     tempstr = ""

025     For tmpx = 0 To UBound(tempdata)  

026         tempstr = tempstr & Chr(tempdata(tmpx))  

027     Next

028     End If

029     Rem 第一个字符串是个什么玩意?  

030     Select Case tempstr  

031     Case "String":  

032             Rem 字符串处理入口  

033             str(Index).startstr = True

034             Exit Sub

035             Rem 字符串第一阶段结束  

036     Case "Data":  

037             Rem 文件接收入口  

038             file(Index).startrecive = True

039             Exit Sub

040     Case "FileName":  

041             Rem 文件名接收入口  

042             file(Index).startfilename = True

043             Exit Sub

044     Case "StartFile":  

045             Rem 文件数据  

046             file(Index).startfiledata = True

047             Exit Sub

048     Case "EOFFile":  

049             file(Index).startfiledata = False

050             'Close Index  

051             Close Index  

052             Exit Sub

053             Rem 文件接收第一阶段结束  

054     ''''''''''''''''''''''''''''''''''''''''''  

055     '''''''''''''''''警报!!'''''''''''''''''  

056     ''''''''Rem 设置传输构思中ing~''''''''''''  

057     '''''''''''''''''警报!!'''''''''''''''''  

058     ''''''''''''''''''''''''''''''''''''''''''  

059     Case "Config":  

060     ''''''''''''''''''''''''''''''''''''''''''  

061     '''''''''''''''''警报!!'''''''''''''''''  

062     ''''''''Rem 设置传输构思中ing~''''''''''''  

063     '''''''''''''''''警报!!'''''''''''''''''  

064     ''''''''''''''''''''''''''''''''''''''''''  

065     Rem 第二阶段入口  

066     Case Else:  

067         If str(Index).startstr Then

068                 str(Index).str = tempdata()  

069                 Rem 字符串接收入口,写入到文件中,其中,目录名称会在保存中出现  

070                 Open "C:\aaa\" & Index & ".txt" For Append As Index  

071                     Print #1, str(Index).str  

072                 Close Index  

073                 txtLog = txtLog & vbCrLf & "收到新的消息。由" & Index & "号终端发送。已经保存在" & "C:\aaa\" & Index & ".txt。"  

074                 str(Index).startstr = False

075                 Rem 关闭接收符号  

076   

077                 Rem 字符串接收结束  

078         Else

079             If file(Index).startrecive Then

080             Rem 文件接收入口  

081                 If file(Index).startfilename Then

082   

083                         tempstr = ""

084                         For tmpx = 0 To UBound(tempdata)  

085                             tempstr = tempstr & Chr(tempdata(tmpx))  

086                         Next

087                         file(Index).FileName = CStr(tempstr)  

088                     file(Index).FileName = Base64Decode(file(Index).FileName)  

089                 Rem 文件名接口结束  

090                     Open "C:\aaa\" & file(Index).FileName & ".file" For Binary Access Write As Index  

091                     file(Index).startfilename = False

092                     Exit Sub

093                 Else

094                     If file(Index).startfiledata Then

095                         Put Index, , tempdata()  

096                     End If

097                 End If

098             End If

099         End If

100     End Select

101 End If

102 End Sub


[ 本帖最后由 最美我中文 于 2010-2-22 01:19 编辑 ]
谁不怀念苏联,谁就没有良心;谁想回到苏联,谁就没有头脑.

Woodu.ME--从零开始的博客生活

TOP