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

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

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

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

    Winsock Terminal示例程序

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

    領測軟件測試網 請注意如果你是用VB6,在裝載此工程之前,請先安裝ThreeD32.OCX。該文件可在VB6的安裝盤中的common\tools\vb\controls目錄中找到,同時在這個目錄中還有一個Vbctrl.reg文件。將這兩個文件拷貝到windows\system目錄下,用regsvr32注冊后,運行Vbctrl已獲取該控件的設計許可證。另外還要注意的是,源程序的注釋部分很多是亂碼,至少在我的機上如此。不過不影響程序運行。

    本示例程序允許你通過選擇通信協議同遠程服務器連接。通過該程序你可以使用幾乎所有的Inte.net服務,例如收發電子郵件,FTP等。一旦建立連接后,你就可以向服務器發送命令并接收來自服務器的回應了。該程序的工作方式有點象DOS操作。本程序并不是一個有完全功能的程序,因此它對最終用戶來講一點用也沒有。它的目的是讓你明白網絡協議的基本原則,一旦你了解了兩臺計算機是如何通過Internet連接的話,對于快速開發Internet程序來說唯一的障礙就是缺乏足夠的VB編程知識了。其實Internet編程最核心的東西就是字符串的處理。無論你選擇哪種網絡協議實際上都是在收發字符串。下圖是本程序的工作界面。

      

    Winsock Terminal是一個小巧且易于明白的應用程序。我們可以把我們要做的事分為六步:  

    用戶界面開發。  
    建立同遠程計算機的聯系  
    編寫代碼,處理接收到消息  
    編寫代碼,處理用戶輸入的命令并發送給遠程計算機  
    關閉與遠程計算機的連接  
    開發服務子程序  
    用戶界面開發

    本程序用到兩個窗體,除上面你所見到的外,還有一個名為frmConnect的窗體,如下圖。用戶可在該窗體中輸入服務器的地址并選擇所需的網絡協議。程序的主窗體(如上圖)包含三個部份:工具欄、狀態欄和工作區。前兩個分別用到了ToolBar和StatusBar這兩個控件,而工作區則是由一文本框控件組成的。當同遠程計算機建立了連接后,工具欄的右邊會顯示發出及接收的字節數。



    狀態欄中顯示的信息表明Winsock控件當前的工作情況。另外為了能使工作區的大小隨窗體大小的改變而改變,我們須將下面的代碼放在窗體的Resize事件中。

    Private Sub Form_Resize()

    On Error Resume Next

    With Me
        txtCommand.Move .ScaleLeft, _
          .ScaleTop + ToolBar.Height, _
          .ScaleWidth, .ScaleHeight - _
           ToolBar.Height - StatusBar.Height
    End With

    End Sub  
    建立與服務器的連接

    為建立與服務器的連接,用戶必須首先單擊“連接”按鈕,此時會彈出一個“連接到...”對話框。在遠程服務器地址欄中輸入要連接的服務器的地址,并選擇網絡協議(換句話說你是在選擇要連接的端口)。該窗體另外還定義了兩個屬性,一個是port屬性,另一個是RemoteHost屬性,這兩個屬性用來接收你在文本框中輸入的端口及服務器地址,并傳遞給Winsock控件。將下面的代碼放在主窗體的“連接”按鈕的Click事件中。  

    Private Sub cmdConnect_Click()  

    Dim frm As New frmConnect  

    frm.Show vbModal  

    If cmdConnect.Tag = "Connect" Then  

    If Not wsCommand.State = sckClosed Then  
    wsCommand.Close  

    Do Until wsCommand.State = sckClosed  
    DoEvents  
    Loop  

    End If  

    StatusBar.Caption = ""  

    wsCommand.Connect frm.RemoteHost, frm.Port  

    End If  

    End Sub  

    顯示服務器的回應  

    當你按下“連接”按鈕,可能會出現兩種情況:一種是由于連接不成功而返回錯誤事件(你可在Winsock控件的幫助文件中查到這些錯誤事件);另一種是連接成功而返回一個Connect事件。如果連接成功,服務器會返回歡迎消息,從而觸發DataArrival事件。下面的代碼被放在該事件中:  

    Private Sub wsCommand_DataArrival(ByVal bytesTotal As Long)  

    Dim strData As String  

    With StatusBar  
    .ForeColor = vbBlack  
    .Caption = "wsCommand : DataArrival ("& bytesTotal & " bytes)"  
    End With  

    lBytesRes = lBytesRes + bytesTotal  

    ToolBar.Caption = "Received: " & lBytesRes & " Sent: " & lBytesSent & " "  

    wsCommand.GetData strData  

    With txtCommand  
    .SetFocus  
    .Text = .Text & strData  
    .SelStart = Len(.Text)  
    End With  

    If Left(strData, 3) = "227" Then  
    MakeDataConnection strData  
    ElseIf Left(strData, 3) = "354" Then  
    bMailData = True  
    End If  

    End Sub  

    每次當Winsock控件從遠程服務器接收到數據時都會觸發DataArrival事件。通過Winsock的GetData方法,我們可以提取這些數據,并將這些數據放在變量strData中。然后我們將這些收到的數據放進文本框中。.SelStart = Len(.Text)語句的作用是使光標跳到文本框中文本的結束處。  

    輸入命令  

    我只有一個文本框來接收你想要發送的命令,同時這個文本框還擔負著顯示由服務器傳來的信息。那么程序如何知道它就將哪一行文本看作是你輸入的命令而發送給服務器呢?本程序通過在文本框的KeyPress事件中建立一個“緩沖”的方法來實現。這個“緩沖”實際上是在Keypress事件中的靜態變量,當你敲擊鍵盤時,你所輸入的字符就被儲存在這個靜態變量中,當你按下回車發送命令時,程序將該變量的值清空。下面是程序代碼:  

    Private Sub txtCommand_KeyPress(KeyAscii As Integer)  

    Static strBuffer As String  

    On Error Resume Next  

    If KeyAscii = 8 Then '捕獲BackSpace鍵
    strBuffer = Left$(strBuffer, _ Len(strBuffer) - 1)  
    Else strBuffer = strBuffer & Chr$(KeyAscii)  
    End If  

    If KeyAscii = 13 Then '當按下回車鍵后發送命令。注意必須在命令后加上vbCrLf,否則服務器無法識別你所發出的命令
    wsCommand.SendData strBuffer & vbCrLf  
    strBuffer = ""  
    End If  

    End Sub  

    如果你按了方向鍵,程序將忽略它們,下面的代碼輕松地解決了這個問題。  

    Private Sub txtCommand_KeyDown(KeyCode As Integer, Shift As Integer)  

    If KeyCode > 36 And KeyCode < 41 Then
    KeyCode = 0
    End If

    End Sub

    下面的代碼使你在文本框中點擊鼠標的動作無效,免得你到處亂輸東西

    Private Sub txtCommand_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)

    txtCommand.SelStart = Len(txtCommand.Text)

    End Sub

    斷開與服務器的連接

    如果你想關閉本程序或新建立一個連接,你必須斷開當前的連接。為達到這一目的,你必須向服務器發送一個QUIT命令,或者調用Winsock的Close方法。同時有必要等待這一命令完成后再退出程序。通過Winsock的State屬性,我們可以知道這一命令是否已經執行完畢。當Winsock的State屬性等于sckClosed時,就表示socket已關閉了。這時就可以放心大膽地退出程序了。

    Private Sub cmdClose_Click()

    If Not wsCommand.State = sckClosed
    Then wsCommand.Close
    Do Until wsCommand.State = sckClosed
    DoEvents
    Loop
    End If

    Unload Me

    End Sub

    開發服務子程序

    為了跟蹤Winsock的事件,在每一個子程序中都有一小段代碼,用來在狀態欄中寫入各種消息。這樣我們就能迅速知道結果以及Winsock事件產生的原因。該控件只有7個事件,所以不需要花太多的時間來寫這些代碼!傲泶鏋椤卑粹o中的代碼是用來保存整個過程的,請注意,文本框最多允許32K的數據。不過清除按鈕,你可以清空整個文本框。

    延伸閱讀

    文章來源于領測軟件測試網 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>