📄 ba21.htm
字号:
1.在 主 窗 口 上 设 一 个 多 行 显 示 的 文 本 框, 用 来 显示 接 收 到 的 所 有 文 本
类 型 信 息。 <br>
2.建 立< 收 件 箱 > 。 实 际 上 是 一 个 数 据 库 中 的 一 个表. 包 含 收 件
日 期, 文 件 名, 文 件 长 度, 序 号 等<br>
字 段。 <br>
3.利 用 事 件 触 发 机 制 来 执 行 接 收 数 据 的 过 程。 即编 写 mscomm1 控 件 的OnCOMM
事 件 的 处 理 程 序。 <br>
4.按 以 下 方 法 来 改 变 输 入 模 式 属 性(InputMode) 的值: 通 常 使InputMode
属 性 为 文 本 模 式。 当 发 现 接<br>
收 到 的 字 符 串 中 有 "FILESTAR" + Chr(5) + Chr(13) +Chr(10),
按 本 软 件 规 定 表 示 传 送 的 文 件 内 容 将 开 始, 则 将InputMode 属 性 改 为
二 进 制 模 式。 当 文 件内 容 接 收 完( 由 接 收 的 字 节 数 判 断) 再 将 InputMode
属 性 改 为 文 本 模 式。 <br>
5.利 用 本 软 件 设 计 的 标 志 字 符 串( 见 七) 来 控 制进 程, 在 发 送 及 接 收 程
序 中 均 使 用。 <br>
<br>
( 二) MSCOMM1 控 件 的 OnCOMM 事 件 的 的 处 理 程 序 <br>
<br>
<br>
Private Static Sub MSComm1_OnComm() <br>
Select Case MSComm1.CommEvent<br>
Case comEvReceive <br>
'接收缓冲区收到Rthreshold个字符时触发<br>
Dim VARC As Variant<br>
Dim N As Long<br>
Dim SJARR() As Byte<br>
'<br>
N = MSComm1.InBufferCount '接收缓冲区字符总数<br>
If MSComm1.InputMode = 0 Then<br>
'当输入模式为文本模式时,将收到的数据放到字符串变量。<br>
MSComm1.InputLen = 0<br>
VARC = Space(N)<br>
VARC = MSComm1.Input <br>
Else<br>
'当输入模式为二进制模式时,将收到的数据放到字节数组。<br>
ReDim SJARR(1 To N)<br>
VARC = ARR<br>
MSComm1.InputLen = N<br>
VARC = MSComm1.Input<br>
End If<br>
ShowDATA TextTerm, N, VARC <br>
'调接收数据处理过程Showdata<br>
End Select<br>
End Sub<br>
<br>
(三)接收数据处理过程 ShowData<br>
<br>
Public Static Sub ShowData(Term As Control, _<br>
N As Long, DATA As Variant)<br>
'参数:Term (主窗体上的文本框,用于显示接受数据)<br>
' N 为本次接收到的字节数<br>
' DATA (接收到的数据.Variant型 )<br>
(变量定义部分:略)<br>
'(一)非文件传输情形(接收的是字符串)<br>
If not mscomm1.InputMode= 0 Then<br>
GoTo L2<br>
End If<br>
'(1)把新接收的字符数据放到文本框TERM末尾<br>
Term.SelStart = Len(Term.Text)<br>
Term.SelLength = 0<br>
Term.SelText = DATA <br>
'(2)未找到文件传输开始标志就结束此过程 <br>
W_FILESTAR = InStr(1, Term.Text, S_FILESTAR, 0)<br>
If W_FILESTAR = 0 Then<br>
Exit Sub<br>
End If<br>
'(3)以下为找到文件传输开始标志的情况<br>
'(3-1)找文件名及文件长度<br>
W_FILENAME = InStr(1, Term.Text, S_FILENAME, 0)<br>
W_FILELEN = InStr(1, Term.Text, S_FILELEN, 0)<br>
FN = Mid(Term.Text, W_FILENAME + 11, (W_FILELEN <br>
- W_FILENAME - 13))<br>
' (3-2)打开接收文件<br>
hJS = FreeFile<br>
JSFN = Pathc + "\SJFILE\S" + Trim(Str(NO)) + "_"
+ FN<br>
Open JSFN For Binary Access Write As hJS<br>
'(3-3)收件箱增加新记录 <br>
W_FILENAME = InStr(1, Term.Text, S_FILENAME, 0)<br>
W_FILELEN = InStr(1, Term.Text, S_FILELEN, 0)<br>
FN = Mid(Term.Text, W_FILENAME + 11, (W_FILELEN - 1) -<br>
(W_FILENAME + 11))<br>
FL = Mid(Term.Text, W_FILELEN + 11, W_FILESTAR <br>
- (W_FILELEN + 10))<br>
SENDLEN = Val(FL)<br>
'应收总字节数SENDLEN<br>
'以下SJRS是已打开的收件箱对应的记录集型变量<br>
SJRS.AddNew '增加一新记录<br>
SJRS!SJRQ = Now '写入收件日期<br>
SJRS!SJFILE = FN '写入收件的文件名<br>
SJRS!SJLEN = Val(FL) '写入收件的长度<br>
SJRS!FILENO = NO '写入收件的序号<br>
'(3-4)显示文件接收窗口<br>
JSLEN = 0<br>
TXINPUT.Show<br>
'(3-5)改变输入模式属性 InputMode为二进制模式<br>
TXRJ.MSComm1.InputMode = comInputModeBinary<br>
'(7)等待几秒,显示 8 7 6 5 4 3 2 1 0<br>
Exit Sub<br>
'(二)文件传输状态处理 <br>
L2:<br>
ReDim JSARR(0 To N - 1)<br>
JSARR = DATA '将字节流放入字节型数组<br>
'将字节型数组中的数据写入已打开的接收文件<br>
Put hJS, , JSARR<br>
JSLEN=JSLEN+N '本次已累计收到的字节数<br>
'已收字节数与文件总长相比较<br>
If JSLEN < SENDLEN Then<br>
Exit Sub<br>
End If<br>
'转此为文件传输已结束 --<br>
'关闭接收文件<br>
Close hJS<br>
'提交收件箱表的新增记录<br>
SJRS.Update<br>
'修改文本显示<br>
W_FILENAME = InStr(1, Term.Text, S_FILENAME, 0)<br>
Term.SelStart = W_FILENAME - 1<br>
Term.SelLength = Len(Term.Text)<br>
Term.SelText = ""<br>
FL = "文件" + FN + "接收结束" + Chr(13) + Chr(10)<br>
Term.Text = Term.Text & FL<br>
'关闭收件窗口<br>
Unload TXINPUT<br>
'改变 InputMode属性为文本模式<br>
TXRJ.MSComm1.InputMode = 0 <br>
Exit Sub<br>
End Sub<br>
~~~~~~~~~~~~<br>
<br>
以 上 以 发 送 和 接 收 文 件 为 例 介 绍 了 我 们 是 如 何使 用VB5.0 及MSCOMM
控 件 来 开 发 自 己 的 的 通 信 软 件 的。掌 握 了 以 上 基 本 技 术, 就 可 以 稍 加 改
变 来 开 发 自 己的 各 种 专 用 通 信 软 件。 例 如 发 送 数 据 库 的 一 条 记 录, 并 使
接 收 方 把 接 收 到 的 数 据 也 放 在 数 据 库 中。也 可 以 进 行 数 据 加 密/ 解 密 传
输 等。 总 之, 学 习 怎 样使 用VB5.0 及MSCOMM 控 件 来 开 发 自 己 的 的 通 信 软
件 是 十分 有 用 的。 <br>
<br>
附 注: 本 软 件 运 行 环 境 <br>
<br>
1、 硬 件 环 境:CPU 为486 以 上,16MB 以 上 内 存。 <br>
2、 软 件 环 境:WIN95 或WIN98 或WINDOWS ─ ─NT。 <br>
VISUAL BASIC 5.0</font></p>
<p class="sfont"> 转载自中国程序员网站</font>
</div>
</td>
</tr>
</center>
<tr>
<td width="100%" class="unnamed1">
<p align=right><a href="ba20.htm">(上一页)</a>---<a href="ba22.htm">(下一页)</a></p>
</td>
</tr>
<tr>
<td width="100%" class="unnamed1">
</div>
</td>
</tr>
<!--msnavigation--></tbody>
</table>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -