📄 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 + -