?? spcp.bas
字號:
bytTest(1) = 1
bytTest(2) = 1
bytTest(3) = 1
bytTest(4) = Len(strFileName)
bytTest(5) = Len(Str(intFileLenth))
strSendFile = strFileName + Str(intFileLenth) '負載中包含有文件名及長度信息
frmMain.ctrMSComm.Output = bytTest '發送數據
frmMain.ctrMSComm.Output = strSendFile
intDataLenth = frmMain.GetOutBuffer \ 2 '設置數據幀負載長度
intDataCount = intFileLenth \ intDataLenth '計算數據幀數
If intFileLenth - intDataLenth * intDataCount > 0 Then
intDataCount = intDataCount + 1
End If
intDataNumber = 1 '計數器設置初值
ReDim bytSendFile(intDataLenth - 1)
For n = 1 To intDataLenth
bytSendFile(n - 1) = bytFileBuffer(n - 1) '準備第一幀數據
Next n
intCommFlag = 1
Case 1 '繼續發送
intCommFlag = 2
If intDataNumber = intDataCount Then '計算數據幀負載長度
intSendLen = intFileLenth - intDataLenth * (intDataCount - 1)
Else
intSendLen = intDataLenth
End If
ReDim bytSendFile(intSendLen - 1)
For n = 1 To intSendLen '加載數據
bytSendFile(n - 1) = bytFileBuffer(intDataLenth * (intDataNumber - 1) + n - 1)
Next n
ReDim bytSend(5 + intSendLen)
For n = 1 To intSendLen
bytSend(n + 5) = bytSendFile(n - 1)
Next n
bytSend(0) = 0 '組織幀頭
bytSend(1) = 0
bytSend(2) = intSendLen \ 100
bytSend(3) = intSendLen - bytSend(2) * 100
intSendLen = bytSend(2) + bytSend(3)
bytSend(4) = intSendLen \ 100
bytSend(5) = intSendLen - bytSend(4) * 100
frmMain.ctrMSComm.Output = bytSend '發送數據幀
intProgress = intDataNumber * 100 \ intDataCount '更新進度條
frmMain.prgFileTransfer.Value = intProgress
intCommFlag = 1
Case 2 '重新發送
intCommFlag = 2
If intDataNumber = intDataCount Then '計算數據幀負載長度
intSendLen = intFileLenth - intDataLenth * (intDataCount - 1)
Else
intSendLen = intDataLenth
End If
ReDim Preserve bytSendFile(intSendLen - 1) '加載數據
ReDim bytSend(5 + intSendLen)
For n = 1 To intSendLen
bytSend(n + 5) = bytSendFile(n - 1)
Next n
bytSend(0) = 0 '組織幀頭
bytSend(1) = 0
bytSend(2) = intSendLen \ 100
bytSend(3) = intSendLen - bytSend(2) * 100
intSendLen = bytSend(2) + bytSend(3)
bytSend(4) = intSendLen \ 100
bytSend(5) = intSendLen - bytSend(4) * 100
frmMain.ctrMSComm.Output = bytSend '發送數據幀
intProgress = intDataNumber * 100 \ intDataCount
frmMain.prgFileTransfer.Value = intProgress '更新進度條
intCommFlag = 1
Case 4 '完成
intCommFlag = 8
bytTest(0) = 0 '組織幀頭
bytTest(1) = 1
bytTest(2) = 0
bytTest(3) = 0
bytTest(4) = 0
bytTest(5) = 0
frmMain.ctrMSComm.Output = bytTest '發送完成控制幀
Close #intFileNumber '關閉文件
MsgBox ("發送完畢!")
frmMain.prgFileTransfer.Value = 0 '恢復進度條
intCommFlag = 1
End Select
intCommFlag = 1
End Sub
'*******************************************************
'文件接收管理
'處理接收到的文件數據,重新拼裝成文作
'*******************************************************
Public Sub FileReceiveManager(intFlag As Long)
On Error GoTo FileError
Dim bytTest(5) As Byte
Select Case intFlag
Case 0 '新文件
intCommFlag = 8
Call frmMain.cmdFileSave_Click '選擇存放路徑
intFileNumber = FreeFile
strFileDirectary = frmMain.ctrCommonDialog.FileName
Open strFileDirectary For Binary As #intFileNumber '打開(或新建)文件
ReDim bytFileBuffer(intFileLenth - 1) '定義文件緩沖區
intFileReceiveLenth = 0 '初始化文件長度計數器
bytTest(0) = 0 '組織幀頭
bytTest(1) = 1
bytTest(2) = 0
bytTest(3) = 1
bytTest(4) = 0
bytTest(5) = 0
frmMain.ctrMSComm.Output = bytTest '請求發送數據
intCommFlag = 1
Case 1 '繼續接收,請求發送
intCommFlag = 8
For n = 1 To intReceiveLen
bytFileBuffer(intFileReceiveLenth + n - 1) = bytReceive(n - 1)
Next n
intFileReceiveLenth = intFileReceiveLenth + intReceiveLen
bytTest(0) = 0 '組織幀頭
bytTest(1) = 1
bytTest(2) = 0
bytTest(3) = 1
bytTest(4) = 1
bytTest(5) = 0
frmMain.ctrMSComm.Output = bytTest '發送請求
intProgress = intFileReceiveLenth * 100 \ intFileLenth '更新進度條
frmMain.prgFileTransfer.Value = intProgress
intCommFlag = 1
Case 2 '請求重新發送
intCommFlag = 8
bytTest(0) = 0 '組織幀頭
bytTest(1) = 1
bytTest(2) = 0
bytTest(3) = 1
bytTest(4) = 0
bytTest(5) = 0
frmMain.ctrMSComm.Output = bytTest '發送重發請求
intCommFlag = 1
Case 4 '完成
Put #intFileNumber, , bytFileBuffer '把文件寫入磁盤
Close #intFileNumber '關閉文件
MsgBox ("接收完畢!")
frmMain.prgFileTransfer.Value = 0 '恢復進度條
intCommFlag = 1
End Select
intCommFlag = 1
FileError:
End Sub
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -