⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 9931.txt

📁 关于编程技术技巧的文章
💻 TXT
📖 第 1 页 / 共 4 页
字号:

  以上程序在中文Windows 98,Delphi 3.0软件环境下运行通过。 

****************************************************************

                     用VB5.0开发通信软件的技巧 

  一自己开发通信软件的必要性: 

  ----随着计算机应用领域的不断扩展,计算机之间的远程通信用得越来
越广泛.进行计算机通信需要调制解调器(modem),电话线及通信软件.尽管
市面上有许多商品通信软件,但是在许方情况下商品通信软件并不能满足实
际工作的需要.这是因为通用的通信软件虽然能发送和接收文件,但有些时
侯是不适用的.例如我们在开发一个EDI(电子数据交换)应用系统时,就需
要把接收到的某个单证直接地自动地放到一个数据库中,作为一条记录。
这种情况下采用通用的通信软件就不行了,需要开发自己专用的通信软件。 

  ----过去,开发通信软件对于一般的应用软件开发人员来说是比较困
难的。而现在这件事已经变得容易多了。本文介绍如何利用VB5.0和MSCOMM
控件开发通信软件。 

  ----要想自己开发通信软件,除了要掌握VB5.0的基本编程语言以外,
还需知道一些微机通信的基本原理。如有关串行端口及调制解调器的基本
知识,调制解调器的使用手册及AT命令集等。这在许多书中都可以找到。
本文不再叙述。 

  二有关预备知识----在PC机串行端口与调制解调器进行连接时,有十
几根线进行信号传输。对于用MSCOMM控件编制通信软件来说,只需了解以
下五根线的代号及作用。以下五根线的高电平/低电平状态分别对应MScomm
控件的相应属性的True/False值。 

  ---- (1) DTR线:PC发往MODEM,表示PC机是否已准备好。 

  ---- (2) RTS线:PC发往MODEM,表示PC机是否允许modem发回数据. 

  ---- (3) DSR线: MODEM发往PC,表示MODEM是否已做好操作准备 

  ---- (4) CTS线: MODEM发往PC,表示MODEM是否允许发送数据 

  ---- (5) CD线: MODEM发往PC,表示MOEDM已经与呼叫的远方MODEM处于
连结状态 

  三MSCOMM控件的属性及事件 

  ---- VB5.0所带的通信控件MSCOMM易学易用。它只有约30个属性和事
件。可以从VB5.0的联机帮助中找到它的全部资料。本文简述它的主要属性
及事件,并加已归类整理。以下用MSCOMM1表示在窗体上设置的一个MSCOMM
控件的名称 

  ----(一)通信参数设置 

  ---- (1) CommPort属性 

  ----语法: MSCOMM1.CommPort [=Value] 

  ----作用:设置或返回联接MODEM的串口的编号。 

  ----值:用1,2, ...表示串口COM1,COM2 .... 

  ---- (2) Settings属性 

  ----语法: MSCOMM1.Settings [=Value] 

  ----作用:设置或返回通信参数。 

  ----值: String型。例入用"19200,N,8,1"表示传输速率为19200 bps,
没有奇偶校验位,8位数据位,1位停止位。 

  ---- (3) Handshaking属性 

  ----语法: MSCOMM1.Handshaking [=Value] 

  ----作用与值:设置或返回硬件握手协议。指的是PC机MODEM之间为了
控制流速而约定的内部协议。 

  ---- 0没有握手协议。不考虑流量控制。 

  ---- ---- 1 XON/XOFF。即在数据流中嵌如控制苻来进行流控。 

  ---- 2 RTS/CTS。既由信号线RTS/CTS自动进行流量控制。 

  ---- 3两者皆可。 

  ----注:实践中我们发现选用2(即RTS/CTS)是很方便的。 

  ----(二)打开/关闭端口 

  ---- (4) PortOpen属性 

  ----语法: MSCOMM1.PortOpen [=Value] 

  ----作用:打开或关闭端口。 

  ----值: Boolean型。设为True/False可以打开/关闭端口。 

  ---- (三)发送数据 

  ---- (5) OutBufferSize属性 

  ----语法: MSCOMM1.OutBufferSize [=Value] 

  ----作用:设置或返回传输缓冲区大小。 

  ----值: Integer型。传输缓冲区的字节数。例如可选1024。 

  ---- (6) OutPut属性 

  ----语法: MSCOMM1.OutPut [=Variant] 

  ----作用:向传输缓冲区写数据流。 

  ----值: Variant型变量。 

  ----注:传输文本数据时,应将String型数据放入Variant变量,传输二
进制数据(即按字节)时,应将Byte型数组数据放入Variant变量 

  ---- (四)接收数据 

  ---- (7) InBufferSize属性 

  ----语法: MSCOMM1.InBufferSize [=Value] 

  ---- ---- ----作用:设置或返回接收缓冲区大小。 

  ----值: Integer型。接收缓冲区的字节数。例如可选1024。 

  ---- (8) InputMode属性 

  ----语法: MSCOMM1.InputMode [=Value] 

  ----作用:设置或返回接收数据的数据类型。 

  ----值: 0用Input属性接收文本型数据。 

  ---- 1用Input属性接收二进制数据。 

  ---- (9) InBufferCount属性 

  ----语法: MSCOMM1.InBufferCount [=Value] 

  ----作用:返回接收缓冲区中已传到但还未取走的字符个数。 

  ----值: Integer型。 

  ---- (10) Input属性 

  ----语法: MSCOMM1.Input [=Variant] 

  ----作用:将接收缓冲区中收到的数据读入变量。 

  ----值: Variant型变量。 

  ----注:当InputMode属性值为0(文本模式)时,变量中含String型数据。 

  ----当InputMode属性值为1(二进制模式)时,变量中含Byte型数组数据。 

  ---- (五)状态控制 

  ---- (11) DTREnabled属性 

  ---- (12) RTSEnabled属性 

  ---- (13) DSRHolding属性 

  ---- (14) CTSHolding属性 

  ---- (15) CDHolding属性 

  ----以上五个属性即如二所述,均取值TRUE/FALSE,用于读取或控制pc机
与modem之间的交互状态。需运用好。例如,应在读取到DSRHolding属性值为
TRUE时再向MODEM发出命令。应当在载波检测到以后(CDHolding属性为TRUE)
时再向MODEM发送数据。 

  ---- (六)事件 

  ---- MSCOMM控件把实际上是十七个事件归并为一个事件OnComm,用属性
CommEvent的十七个值来区分不同的触发时机。主要有以下几个: 

  ----(1)CommEvent=1时:传输缓冲区中的字符个数已少于Sthreshold
(可设置的属性值)个. 

  ----(2)CommEvent=2时:接收缓冲区中收到hreshold(可设置的属性值)
个个字符.利用此事件可编写接收数据的过程。 

  ----(3)CommEvent=3时:CTS线发生变化. 

  ----(4)CommEvent=4时:DSR线发生变化. 

  ----(5)CommEvent=5时:CD线发生变化. 

  ----(6)CommEvent=6时:检测到振铃信号. 

  ----另外十个情况是可能发生的各种通信错误时触发。可参看有关资料. 

  四通信软件参数设置 

  ----在自己编写的通信软件中,应包含进行通信参数设置的功能。主要
就是可以设置端口号,波特率,数据位,停止位,奇偶校验位及设置硬件握
手协议。 

  ----可在一个窗体上用下拉列表框,选择钮等由用户来选择。《保存》
时,利用VB5.0的Settings函数将这些参数存储在WINDOWS 95的系统注册表
中。每次运行该软件时,先用GetSettings函数调出这些参数,并对Commport,
Settings,Handshaking等属性赋值,来进行通信参数设置。 

  五打开通信端口 

  ----在编写的通信软件的主窗体上,可以安排一个打开/关闭端口的菜单
项或图形按钮。在打开端口时,可向MODEM发出命令,进行MODEM参数设置。
可以象下面这样来编程: 

  ---- '(1)打开/关闭端口 

  MSComm1.PORTOPEN = Not MSComm1.PORTOPEN 

  '(2)向MODEM发出DTR(已准备好)信号----- 
  OpenFlag = MSComm1.PORTOPEN 
  If OpenFlag Then 
  MSComm1.DTREnable = True 
  Else 
  MSComm1.DTREnable = False 
  End If 

  '(3)打开时向MODEM发出一些命令来设置参数 
  'S0=n(n >=1)自动应答.n为响铃次数 
  'E0/E1关闭/打开命令字符回应 
  'Q0/Q1 modem返回/不返回结果码 
  'M0/M1关闭/打开MODEM扬声器. 
  If OpenFlag Then 
  L1: 
  If MSComm1.CTSHolding Then 
  Outstring = "AT S0=1 E1 Q0 M0 " + Chr(13) 
  MSComm1.Output = Outstring 
  GoTo LL 
  Else 
  GoTo L1 
  End If 
  End If 
  '----- 
  LL: ... 

  ----也可以安排一些可变换颜色的指示灯来代表端口打开状态,CD线状
态等,这样更形象生动。 

  六 拨号----进行拨号需向MODEM发出ATDT命令。可用如下语句: 

  cc = "ATDT " + Trim(Text1.Text) + Chr(13)MSComm1.Output = cc 

  ----其中TEXT1是窗体上让用户输入电话号的文本框。 

  ----为了使程序功能更强一些,可以增加<电话号码簿管理>,可以增加,
修改,删除,查询电话号码。这与一般的数据库应用程序是一样的。 

  七 发送文件----拨号以后,程序要循环等待并随时判定是否接通。如果
MODEM向PC的回应字符串中含有"Connect "或CDHolding属性值变为True (检
测出载波),则表示已与远方MODEM连机了。这时就可以发送文件了。 

  ----发送文件开始以前,可打开一个显示发送信息的窗口。可在此窗口
上显示要发送的文件名,总长度,已发送长度等信息。 

  ----设置以下全局变量,存放标志字符串,在发送及接收程序中均使用。 

  S_FILENAME = "FILENAME" + Chr(5) + Chr(13) + Chr(10) 
  S_FILELEN = "FILELEN " + Chr(5) + Chr(13) + Chr(10) 
  S_FILESTAR = "FILESTAR" + Chr(5) + Chr(13) + Chr(10) 

  (1)打开文件: 

  要想把一个文件的全部字节都传送,需以二进制方式打开文件。可用如
下语句 
  '得到下一个可用的文件号,放在整型变量 hSend 
  hSend = FreeFile 
  '打开文件 
  Open SENDFN For Binary Access Read As hSend 
  LF& = LOF(hSend) '文件长度为 LF& 
  其中变量 SENDFN中含有由用户选定的要传送的文件名。 

  (2)发送文件名,文件长度,文件开始等信息字符串。 
  例如,我们设计成如下: 
  DIM VARC AS VARIANT 
  VARC = S_FILENAME 
  MSComm1.Output = VARC '发出 "FILENAME"提示字串 
  VARC = SENDFN + Chr(13) + Chr(10) 
  TXRJ.MSComm1.Output = VARC '发出文件名 
  VARC = S_FILELEN 
  MSComm1.Output = VARC '发出 "FILELEN"提示字串 
  VARC = Trim(Str(LF&)) + Chr(13) + Chr(10) 
  MSComm1.Output = VARC '发出文件宽度 
  VARC = S_FILESTAR 
  '发出 "FILESTART"提示字串,表示下面文件开始。 
  MSComm1.Output = VARC 
  然后程序倒计时,在发送信息窗口显示 8,7,6,5,4,3,2,1,0 . 

  (3)发送文件内容 

  用 GET语句从文件读字节,用 OUTPUT属性发送。 
  DIM SENDARR() AS BYTE '定义字节型数组 
  Sum = 0 '记录累计发送的字节数 
  BSIZE = MSComm1.OutBufferSize '每次发送的块大小 
  ReDim SENDARR(1 To BSIZE) 
  '循环发送 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -