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

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

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

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

    自己動手編制支持終端打印的TELNET程序

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 93次 | 進入軟件測試論壇討論

    領測軟件測試網   前言:在行業用戶中,大多數基層計算機應用系統采用UNIX作OS,用支持RS232連接的終端做業務處理,打印也通過終端實現。隨著PC機擁有量的不斷增加,通過網卡、HUB,就可把服務器與PC 機連接起來,然后在PC機上用TELNET登錄上服務器,就可把PC機作終端用了。美中不足的是無法在PC機上實現終端打印,某些TELNET類軟件,也只支持透明打印方式的一種指令,無法滿足終端打印的要求。為了減少硬件的投入,提高現有設備的利用率,我們自己動手做了一個這樣的軟件,能使PC機完全代替終端使用,暫且稱該軟件為TELVT100,下面來一步一步實現它。
    首先,考慮一下TELVT100要實現哪些功能:一、PC機與服務器的連接;二、能虛擬終端顯示,目前,絕大部分UNIX上的應用系統支持VT100終端類型,因此,主要實現VT100終端類型的虛擬;三、把打印內容進行轉換并送到與PC機相連的打印機上。
    現在,分步驟對以上三部分說明,我們采用VB5.0作為開工具,由于程序條數較多,所以只列出與主要文字敘述相關的部分程序段。
    ‘變量的定義及初始化
    Public Ztdi As Integer
    Public IPAddR As String
    Public RmtPtr as Integer
    Public DaBulen as Long
    ......
    Private Sub Form_Load() ‘初始化處理
    Ztdi = Printer.Font.Size ‘打印字體大小
    IPAddR = "32.145.24.1" ‘設置服務器的IP地址
    RmtPtr = 0 ‘指令指針
    DaBuLen = 0 ‘打印緩存大小
    Winsock.Protocol = 0 ‘設定協議為TCP/IP
    ......
    End Sub
    一、 PC機與服務器的TELNET連接
    要實現PC機與服務器的TELNET協議連接,必須先以TCP/IP協議連接PC機與服務器。給服務器端加網卡,并對網卡和TCP/IP協議進行設置,開放TELNET連接,設置端口地址為23。給PC機裝上網卡,并配置網卡和TCP/IP協議。我們在PC機上編制相應的客戶端程序,來實現TCP/IP連接。在這里主要用到VB中Winsock控件,下面了解一下它的有關性能。它提供了訪問TCP/IP網絡服務的方便途徑,用它編寫客戶端應用程序,不必了解TCP/IP的細節,通過設置控件的屬性并調用其方法就可連接到服務器上去,即把控件的RemoteHost屬性設置為服務器的IP 地址,把RemotePort屬性設置為服務器“偵聽”的端口地址(上文提到的端口地址23),然后調用Connect方法實現與指定的IP地址服務器連接。建立連接后,服務器與PC機就可以互相收發數據。為了發送數據,要調用SendData方法。當客戶端接收到數據時會發生 DataArrival 事件,在DataArrival事件內調用GetData方法就可獲取數據。
    連接建好后,PC機與服務器用TELNET協議命令建立協調機制。命令共有15條,每條命令前都要加上字符IAC(255),指出緊跟著的字符是命令。代碼250和代碼240用作命令的分界符,其余命令可分為兩類。(一)基本命令:由代碼241-249代表,它們執行TELNET的基本功能;(二)磋商選擇命令:由代碼251-254表示,這類命令主要實現兩進程間磋商各種可選擴充功能。命令列表(1),詳細解釋,請查閱有關資料。
    二、 實現VT100終端類型的虛擬
    (一)、在有關窗體上加入一個TEXT控件,設為Text1,在Text1.KeyPress事件中,獲得PC機的鍵盤輸入,然后把相應鍵值變更為VT100終端鍵盤所對應的鍵值,把該值用Winsock控件的SendData方法發送給服務器,并禁止向TEXT控件的輸出。


    (二)、服務器接收鍵值后,作出相應的處理,并把輸出的內容發送給對應的客戶端,我們在Winsock控件的DataArrival事件中調用Winsock控件的GetData方法,來獲得服務器發來的數據。
    (三)、我們獲得的從服務器發來的數據中,包含終端的控制指令。必須把控制指令分離出來,并做相應處理,同時把顯示數據送到顯示界面的指定位置。有關VT100終端指令的詳細說明,請查閱有關技術手冊,這里以光標定位指令ESC[Pr;Pc H舉例說明。該指令的解釋為:把顯示界面的光標移動到第Pr行,第Pc列,Pr、Pc均為10進制數字,Pr值在1-24中,Pc值在1-80中。我們可把顯示界面看做24X80的矩陣,每一個矩陣點上是一個字符,假設Pr=10,Pc=30,那么對該指令的執行結果,就是把對應光標位置的指針移到顯示界面的顯存偏移(10-1)*80+30的地方。具體實現過程如下:
    ‘***接收鍵盤輸入、與服務器連接并向服務器發送***
    Private Sub Text1_KeyPress(KeyAscii As Integer)
    Dim ch as String
    ‘判斷網絡連接是否處于正常狀態
    If Winsock1.State <> 0 And Winsock1.State <> 7 Then
    ch = MsgBox("網絡異常,請重新連接!")
    KeyAscii = 0 ‘封鎖鍵盤輸入
    Exit Sub ‘退出本事件
    End If
    If Winsock1.State = 0 Then ‘網絡處于斷開狀態
    IPADDR=Winsock1.RemoteHost
    Winsock1.Connect IPAddR, 23 ‘與服務器連接
    Else
    Winsock1.SendData StrConv(Chr(KeyAscii), 8) ‘向服務器發送鍵盤輸入
    End If
    KeyAscii = 0 ‘禁止向Text控件送鍵值
    End Sub
    ‘***接收服務器向客戶端發送的數據***
    Private Sub newRecdata(CHRR As Variant) ‘虛擬終端處理函數
    ......
    Print_ComX CHRR ‘調用打印指令處理函數
    ......
    End Sub
    Private Sub Te.net_Com(CHRR As Variant) ‘TELNET指令過濾函數
    ‘要把相應的應答指令直接發送給服務器
    ......
    End Sub
    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) ‘數據到達以后,觸發該事件
    Dim CHRR As Variant
    Winsock1.GetData CHRR ‘讀取接收到的數據
    Telnet_Com CHRR ‘TELNET指令過濾函數
    newRecdata CHRR ‘虛擬終端處理函數
    End Sub
    三、 在PC機上實現終端打印
    在終端機上主要有屏幕打印、拷貝打印、透明打印、控制打印、格式打印等打印形式,一般用在業務處理上的主要用透明打印和控制打印,這里主要介紹透明打印和控制打印。
    (一)、透明打印的實現
    在透明打印方式下,終端從服務器收到的字符除(11H)和(13H)外均不處理,全部送到打印機去,這種方式一般適用于帶有漢字字庫的打印機。應用程序發出ESC[5i控制指令,指出隨后送出的字符是透明打印的內容,發出ESC[4i控制指令指出透明打印結束。根據以上敘述,在用Winsock控件的GetData方法獲得的字符串中出現ESC[5i控制指令時,就要把隨后的字符送到打印端口,而不是送到顯示界面對應的顯存,在GetData方法獲得的字符串中出現ESC[4i控制指令時,就要把隨后的字符送到顯示界面對應的顯存,而停止送到打印端口。假設打印機接在LPT1端口,把字符串送到打印機的例程如下:
    Private Print_ComT1(DayBuf as String) ‘透明打印處理函數
    ......
    Open "LPT1:" For Binary Access Write As #1 ‘把打印機作為文件打開
    If DaBuLen > 0 Then ‘斷判是否有打印數據
    Put #1, , StrConv(DayinBuf, vbUnicode) ‘把數據送到打印機
    End If
    Close #1
    ......
    End Sub
    (二)、控制打印的實現
    控制打印的實現比透明打印相對而言要復雜些,在控制打印方式下,打印的漢字字形、行距、字距控制等均使用終端命令實現,對打印機的要求是能支持圖形打印。當終端收到ESC[/5i控制指令時,終端對隨后收到的字符串,作為控制打印的內容(內含打印屬性命令)進行處理,當終端收到ESC[/4i控制指令時,結束控制打印?刂拼蛴〉拇蛴傩悦钣袔追N,詳細解釋,請查閱相關資料,這里以ESC[/PsT命令來舉例。Ps=0時,字符大小正常;Ps=1時,字符橫向放大到2倍;Ps=2時,字符縱向放大到2倍;Ps=3時,字符橫、縱各放大到2倍。顯然,從上面的說明可以看出,打印屬性命令,必須由TELVT100程序來解釋,并對有關打印字符串進行處理,然后將處理過的內容交給打印機。這里將用到一個VB當中的對象PRINTER來完成控制打印功能,使用PINNTER對象,我們可以實現與打印機的通訊。用圖形方法在 Printer 對象上繪制文本和圖形后,可用 EndDoc 方法直接將打印信息送到打印機上。這里主要用到Printer對象的Print方法,它的功能就是把指定字符串送到Printer 對象上,還要用到Font屬性等,具體用法舉例說明如下:
    Private Static Sub Print_Com2(Dayinbuf as String) ‘控制打印處理函數
    Dim PPart() As Byte
    Dim i, j As Long
    Dim Combuf(12) as Byte
    Dim CombufPtr As Long
    ......
    For i = 0 To DaBuLen - 1
    Select Case DayinBuf(i)
    ......
    If CombufPtr <> 0 Then ‘判斷是否有打印內容
    Printer.Print StrConv(PPart, vbUnicode) ‘把待打印內容送到Printer打印對象
    CombufPtr = 0 ‘指針復位
    ......
    Select Case Combuf(RmtPtr)
    Case Asc("T") ‘打印屬性指令ESC[/Ps T
    Select Case Combuf(RmtPtr - 1)
    Case 48
    Printer.Font.Size = Ztdi ‘字體為正常大小
    ......
    Case 51
    Printer.Font.Size = 2 * Ztdi ‘字體橫、縱各放大到二倍
    ......
    End Select
    ......
    End Select
    ......
    End Select
    .....
    next i
    If CombufPtr <> 0 Then
    Printer.Print StrConv(PPart, vbUnicode) ‘把待打印內容送到Printer打印對象

    ......
    Printer.EndDoc
    End If
    End Sub
    另外,在透明打印的實現上,可以采用控制打印的實現方法,這里涉及到對打印機指令進行解釋的問題。在與本地服務器的連接上,可以象終端一樣,把連接到終端的線纜直接連接到PC機的RS232口上,然后在TELVT100程序中加入MSCOMM控件,設置適當的通訊參數,用該控件的Input、Output方法進行數據收發,可以完全模仿終端使用。
    經過以上各個過程,我們的TELVT100就近在眼前了。由于篇幅所限,不能面面具到,只給大家提供一個主體框架,想起到拋磚引玉的效果,希望和感興趣的各位一起分享成功帶來的歡樂。本程序已經被試用了一段時間,反映情況良好。
    結束語:現在國內正流行數據的整合、集中,行業用戶的業務處理系統在上一級部門的服務器上運行,基層單位往往采用終端服務器通過數據專線遠程連接到上級部門。使用TELVT100這樣的程序,可以不用終端服務器,而直接用PC機遠程登錄到業務處理系統服務器,進行業務處理。

    延伸閱讀

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


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