• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    開發通信軟件的技術與技巧

    發布: 2007-5-25 09:21 | 作者: ghj1976 | 來源: 互聯網 | 查看: 42次 | 進入軟件測試論壇討論

    領測軟件測試網 開發通信軟件的技術與技巧



    國防大學圖書館技術室 王渤

    【提要】隨著計算機應用領域的不斷擴展,計算機之間的遠程通信用得也越來越廣泛,計算機間的遠程通信所使用的通信軟件,在市面上可以買到,但是通用的通信軟件雖然能發送和接收文件,在許方情況下這些通信軟件并不能滿足實際工作的需要。本文就這一技術進行了探討,介紹了有關的知識和技術,并由實例分步驟說明如何進行通信軟件的開發。

    一、前言
      本文將以VB5.0所帶的通信控件MSCOMM進行通信軟件的開發,它有約30個屬性和事件(可以從聯機幫助中找到其使用資料)。本文簡述它的主要屬性及事件,并歸類整理。
    利用串行端口與調制解調器進行連接時,對于用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控件的屬性
    屬性

    作用
    CommPort
    用1,2,...表示串口COM1,COM2....
    設置或返回聯接MODEM的串口的編號
    Settings
    例用"19200,N,8,1"表示傳輸速率為19200bps,沒有奇偶校驗位,8位數據位,1位停止位。
    設置或返回通信參數。
    Handshaking
    0沒有握手協議,不考慮流量控制。
    1XON/XOFF,即在數據流中嵌如控制苻來進行流控。
    2RTS/CTS,既由信號線RTS/CTS自動進行流量控制(常用)。
    3兩者皆可。
    設置或返回硬件握手協議,指的是PC機MODEM之間為了控制流速而約定的內部協議。
    PortOpen
    True/False可以打開/關閉端口。
    打開或關閉端口。
    OutBufferSize
    傳輸緩沖區的字節數,如選1024。
    設置或返回傳輸緩沖區大小。
    OutPut
    Variant型變量。
    向傳輸緩沖區寫數據流。
    傳輸文本數據時,應將String型數據放入Variant變量,傳輸二進制數據(即按字節)時,應將Byte型數組數據放入Variant變量
    InBufferSize
    接收緩沖區的字節數,如選1024。
    設置或返回接收緩沖區大小。
    InputMode
    0用Input屬性接收文本型數據。
    1用Input屬性接收二進制數據。
    設置或返回接收數據的數據類型。
    InBufferCount
    Integer型
    返回接收緩沖區中已傳到但還未取走的字符個數。
    Input
    當InputMode屬性值為0(文本模式)時,變量中含String型數據。
    當InputMode屬性值為1(二進制模式)時,變量中含Byte型數組數據。
    將接收緩沖區中收到的數據讀入變量。
    DTREnabled
    RTSEnabled
    DSRHolding
    CTSHolding
    CDHolding
    均取值TRUE/FALSE
    用于讀取或控制pc機與modem之間的交互狀態。需運用好。例如,應在讀取到DSRHolding屬性值為TRUE時再向MODEM發出命令。應當在載波檢測到以后(CDHolding屬性為TRUE)時再向MODEM發送數據。

    三、MSCOMM控件的觸發事件
      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時:檢測到振鈴信號。
      另外十種情況是通信錯誤時產生,即錯誤代碼。

    四、通信軟件程序實現
     。、首先是通信參數設置,主要就是可以設置端口號,波特率,數據位,停止位,奇偶校驗位及設置硬件握手協議,這些設置較為簡單。
    2、向MODEM發出DTR(已準備好)信號,如下例程:
    If MSComm1.PORTOPEN Then
    MSComm1.DTREnable=True
    Else
    MSComm1.DTREnable=False
    EndIf
    3、打開時向MODEM發出一些命令來設置參數,其中S0=n(n>=1)自動應答.n為響鈴次數;E0/E1關閉/打開命令字符回應;Q0/Q1modem返回/不返回結果碼;M0/M1關閉/打開MODEM揚聲器,例程如下:
    If MSComm1.PORTOPEN Then
    Do While not MSComm1.CTSHolding : loop
    Outstring="ATS0=1E1Q0M0"+Chr(13)
    MSComm1.Output=Outstring
    End if
    4、進行撥號設計,需向MODEM發出ATDT命令,如下語句:
    MSComm1.Output="ATDT"+Trim(“電話號碼”)+Chr(13)
    5、撥號以后發送數據文件,程序要循環等待并隨時判定是否接通。如果MODEM向PC的回應字符串中含有"Connect"或CDHolding屬性值變為True(檢測出載波),則表示已與遠方MODEM連機了,此時可以傳輸數據。
    程序設計發送及接收程序時,需要以下定義:
    S_FILENAME = "NAME" + Chr(5) + Chr(13) + Chr(10)
    S_FILELEN = "LENTH" + Chr(5) + Chr(13) + Chr(10)
    S_FILESEND = "BEGIN" + Chr(5) + Chr(13) + Chr(10)

    Sub OpenFileToSend() '打開一個欲發送的文件
    HSend = FreeFile
    Open SENDFN For Binary As hSend 'SENDFN中含有由用戶選定的要傳送的文件名。
    LF&=LOF(hSend) '文件長度為LF&
    '開始發送文件名,文件長度,文件開始等信息字符串。
    Dim Data as Vrait
    Data = S_FILENAME
    MSComm1.Output=Data '發出"FILENAME"文件名字串的提示信息
    Data = SENDFN +Chr(13)+Chr(10)
    MSComm1.Output=Data '發出文件名
    Data = S_FILELEN
    MSComm1.Output=DATA '發出"FILELEN"提示字串
    Data = Trim(Str(LF&))+Chr(13)+Chr(10)
    MSComm1.Output=Data '發出文件大小
    Data = S_FILESTAR
    MSComm1.Output=Data '發出"FILESTART"提示信息,表示下面文件開始。

    Dim Sendarr() as byte '定義字節型數組
    Sum=0 '記錄累計發送的字節數
    BSIZE=MSComm1.OutBufferSize '每次發送的塊大小
    ReDim Sendarr(1 To BSIZE) '重新定義讀取緩沖
    Do While Sum<LF& '循環發送
    If LF&-Loc(hSend)<BSIZE Then
    BSIZE=LF&-Loc(hSend)
    ReDim Sendarr(1 To BSIZE)
    End If
    Get hSend ,, SENDARR '從文件取字節放入字節數組
    Sendvar=Sendarr '轉放到Variant型變量
    '當CTS線及CD線為高電平時才可發送,否則需等待。
    T=Timer+60
    L:
    If MSComm1.CTSHolding And MSComm1.CDHolding Then
    MSComm1.Output=Sendvar '發送
    Sum = Sum + BSIZE'累加計數
    Else
    If Timer < T Then
    Go To L '循環等待
    Else
    Go To CLOSEFILE '等待時間超過60秒則退出
    End If
    End If
    '等待系統處理完
    Do
    RET = DoEvents()
    Loop Until MSComm1.OutBufferCount = 0
    Loop '循環發送完畢。

    6、接收MODEM送回的信息和數據文件,該過程是編寫mscomm1控件的OnCOMM事件的處理程序來完成。為了接收文本類型的握手信號,通常使InputMode屬性為文本模式。當發現接收到的字符串中有"FILESTAR"+Chr(5)+Chr(13)+Chr(10),則將InputMode屬性改為二進制模式。當文件內容接收完(由接收的字節數判斷)再將InputMode屬性改為文本模式。例程如下:
    Private Static Sub MSComm1_OnComm()
    Select Case MSComm1.CommEvent
    Case comEvReceive '接收緩沖區收到Rthreshold個字符時觸發
    Dim DATA As Variant
    Dim N As Long
    Dim SJARR() As Byte
    N=MSComm1.InBufferCount '接收緩沖區字符總數
    If MSComm1.InputMode=0 Then'文本模式時,將收到的數據放到字符串變量。
    MSComm1.InputLen=0
    DATA = Space(N)
    DATA = MSComm1.Input
    Else '二進制模式時,將收到的數據放到字節數組。
    ReDim S JARR(1ToN)
    DATA=ARR
    MSComm1.InputLen=N
    DATA=MSComm1.Input
    End If
    '其它case情況略
    End Select
    End Sub

    7、關于接收到的數據的處理例程:
    Public Static Sub HandleData (Disp As Control,N As Long,DATA As Variant)
    '參數:Disp(文本框,用于顯示接受數據)
    'N為本次接收到的字節數
    'DATA(接收到的數據.Variant型)
    If not mscomm1.InputMode=0 Then '接收的是字符串
    Go To L2
    End If
    Disp.SelStart = Len ( Disp.Text)
    Disp.SelLength = 0
    Disp.SelText = DATA '顯示字符數據
    If InStr(1,Disp.Text,S_FILESTAR,0)=0 Then '若沒有開始標志就結束此過程
    ExitSub
    EndIf
    V_FILENAME = InStr(1,Disp.Text,S_FILENAME,0) '找文件名及文件長度
    V_FILELEN = InStr(1,Disp.Text,S_FILELEN,0)
    FN = Mid(Disp.Text,V_FILENAME+11,(V_FILELEN-V_FILENAME-13))
    HJS = FreeFile'打開接收文件
    JSFN = Pathc+"\SJFILE\S"+Trim(Str(NO))+"_"+FN

    Open JSFN For Binary As HJS
    V_FILENAME = InStr(1,Disp.Text,S_FILENAME,0)
    V_FILELEN = InStr(1,Disp.Text,S_FILELEN,0)
    FN = Mid(Disp.Text,V_FILENAME+11,(V_FILELEN-1)-(V_FILENAME+11))
    FL = Mid(Disp.Text,V_FILELEN+11,V_FILESTAR-(V_FILELEN+10))
    SENDLEN = Val(FL) '應收總字節數SENDLEN

    ReDim JSARR(0 To N-1)
    JSARR=DATA '將字節流放入字節型數組
    Puth JS , , JSARR ' 寫入已打開的接收文件
    JSLEN=JSLEN+N '本次已累計收到的字節數
    Close HJS
    End Sub

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>