<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      Internet服務端口測試程序的設計與完成

      [摘要]作者: 北京國創信息技術產業公司 雷進 一、程序的實用背景 上網的朋友越來越多,遇到的問題也越來越多,最常見的就是關于域名服務器(DNS)、郵件服務(SMTP)和POP3的配置問題。例如,選用哪一個DNS,202.96.0.133還是202.96.26.243?記不清ISP的郵件服務器和域名服務...
      作者: 北京國創信息技術產業公司  雷進

      一、程序的實用背景

      上網的朋友越來越多,遇到的問題也越來越多,最常見的就是關于域名服務器(DNS)、郵件服務(SMTP)和POP3的配置問題。例如,選用哪一個DNS,202.96.0.133還是202.96.26.243?記不清ISP的郵件服務器和域名服務器的IP地址,202.96.26.243還是245?

      另外一個問題就是,我們在下載文件的時候,往往面臨從多個不同主機下載的選擇(象sunsite有數十個鏡像站點)。那么,選擇哪一個站點進行下載是最快的呢?

      筆者為此編寫了一個應用程序,試圖對Internet的常用的網絡通信端口(如Web、Email、FTP等)進行連接測試,獲得服務端口的狀態和響應時間指標,從而為我們更有效的使用Internet提供準確的參考數據。筆者為該程序命名為Tester(測試者),從后面敘述不難發現,Tester還可以作為簡單的Internet系統性能測試工具來使用。

      雖然Tester也涉及了其它的編程方法,但就總體而言,Tester屬于Socket應用程序。所以我們先從Socket編程的模型入手,介紹Tester 程序的設計與實現。

      二、Socket編程模型

      Socket是網絡通信的一個端點。我們知道,網絡通信通常指兩臺主機或兩個進程,通過網絡傳遞它們之間的數據,這樣的過程可以理解為網絡的一次對話(Session)。網絡對話的每一端就成為網絡通信的端點,即網絡通信實體的最小單位。當使用Socket接口對網絡通信編程時,Socket是網絡通信過程中端點的抽象表示。大多數網絡通信采用客戶/服務器模型,客戶/服務器模型按照端點的工作性質來區分通信雙方的端點。例如,客戶/服務器模型將啟動網絡服務請求的端點視作客戶進程或客戶程序;對客戶請求作出響應的端點是服務器進程或服務器程序。

      為了進行網絡通信,程序在網絡的對話的每一端都需要一個Socket,即客戶端的Socket和服務器端的Socket。兩個Socket之間的連接可以是面向連接的也可以是無連接的。雖然從目前看,Socket編程已經不再局限于UNIX 系統,但是Socket接口在網絡通信時仍然使用UNIX系統I/O概念,Socket接口模型仍然采用Open-Read-Write-Close方式。Socket編程的包括幾個主要步驟:

      1、建立Socket;

      2、配置Socket;

      3、通過Socket發送數據;

      4、通過Socket接收數據;

      5、關閉Socket。

      三、CSocket編程模型

      對于網絡通信編程的初學者來說,直接使用上述的socket模型會感覺困難和復雜。VisualC++的MFC(基礎類庫)提供了一些封裝好的對象可供使用,這些對象的概念相對簡單,編程相對容易。Tester程序就是使用MFC的幾個與socket相關的類來實現的。

      在服務器Socket和客戶Socket之間建立通信的過程如下文所述。

      1、創建CSocket對象。

      2、使用該對象產生SOCKET句柄。

      3、如果socket是客戶,調用CAsyncSocket::Connect,連接本地的Socket和服務器Socket;

      如果socket是服務器,調用CAsyncSocket::Listen,開始偵聽從客戶端來的訪問請求,如果收到請求,調用CAsyncSocket::Accept進行接收處理。

      4、建立CSocketFile對象,并且使該對象與CSocket對象具備一定的聯系;

      5、建立CArchive對象,以便實現卸裝(接收)數據和存儲(發送)數據的目的。當然,該CArchive對象應該與前面的CSocketFile對象建立聯系;

      6、使用CArchive對象在客戶和服務器socket 之間傳遞數據,從而實現服務器socket和客戶機socket之間的通信。值得注意的是,一個給定的CArchive對象只能在單一的方向上傳遞數據:或者接收或者發送。一般情況下,可能需要兩個CArchive對象來實現數據的雙向傳遞。

      7、解析archive、socketfile、socket對象。

      四、程序的實現

      簡單地講,對于程序的實現,筆者主要考慮了三部分的內容:Socket、時鐘以及界面。

      Socket(網絡通信實體)

      Tester作為一個客戶端的socket通信程序,包括TestSocket(Csocket派生類)、TestSocketFile(CSocketFile派生類)和TestArchiveIn、TestArchiveOut(CArchive派生類)等。這些對象的建立和使用與上述的CSocket編程模型相同。

      時鐘(用于測試網絡上Internet服務端口的響應時間)

      Tester在Socket連接建立的前后分別調用clock系統函數,從而可以利用二者的相對差別獲得絕對時間參數。clock函數可以獲得某一系統調用過程所耗費的時間。clock函數的返回值是處理器的計時單位次數。Tester的時間單位是毫秒。

      ...... //其它代碼

      clock_tstart=clock();

      if(m_pSocket->Connect(lpszAddress,nPort))
      {
      clock_tend=clock();
      ...... //其它代碼
      }
      else
      {
      clock_tend=clock();
      ...... //其它代碼
      }

      ...... //其它程序段

      從程序中可以看出,Tester記錄的響應時間,是指處理器在整個網絡通信的連接建立過程中的響應時間。這一結果和網絡狀況、服務器端的響應時間、本地系統的性能均有關系。實際上,網絡用戶在實際應用過程中真正的時間延遲,就是上述各個因素的總和。另外,Tester的響應時間結果是10次測試的平均數。所以,Tester測試的是整個網絡應用的響應時間,是綜合的指標。

      界面(與程序使用者進行交互,指令的輸入和結果的輸出)

      1、輸入部分

      Tester使用了對話框對象:SetupDlg::CDialog,在對話框中,使用Check、Edit等控制件,并且通過這些控制向程序傳遞使用者所指示的測試信息。

      2、輸出部分

      Tester是單文檔界面(SDI)的應用程序。窗口風格見下面程序段:

      ......//其它代碼

      CEditView::PreCreateWindow(cs);
      cs.style=AFX_WS_DEFAULT_VIEW WS_VSCROLL
      ES_AUTOHSCROLL ES_AUTOVSCROLL ES_MULTILINE
      ES_NOHIDESEL ES_READONLY;

      ......//其它代碼

      利用Tester的菜單功能可以把每次的測試結果存為純文本格式的文件。

      五、程序的應用舉例

      Tester對于熟悉Internet應用的使用者來說,界面一目了然,操作十分簡單。首先,使用者根據測試需要填寫參數設置對話框;確認后,由Tester程序自動執行測試工作,并將測試結果顯示于Tester窗口中。同時,用戶也可以將測試結果存為文本文件。

      Tester的用戶可以自定義一些服務端口進行測試(例如,對話框中沒有列出的Gopher等Internet服務)。當然,在這種情況下,用戶必須知道被測試的服務的Socket端口號。

      下面給出幾個測試結果文件,僅供參考(筆者經由2631撥號上網進行測試)。

      被測主機:163.net
      測試時間:10:37,June09,1998

      Internet服務狀態響應時間(ms)
      ------------------------------------------------
      FTPOFF
      SMTPON2030
      DNSOFF
      POP3ON1050
      HTTPON380

      被測主機:ihw.com.cn
      測試時間:10:38,June09,1998

      Internet服務狀態響應時間(ms)
      --------------------------------------------
      FTPOFF
      SMTPON3670
      POP3ON720
      HTTPOFF

      被測主機:www.yahoo.com
      測試時間:10:38,June09,1998

      Internet服務狀態響應時間(ms)
      ------------------------------------------
      FTPOFF
      TELNETOFF
      SMTPOFF
      DNSOFF
      POP3OFF
      HTTPON1700


      被測主機:www.microsoft.com
      測試時間:10:39,June09,1998

      Internet服務狀態響應時間(ms)
      ----------------------------------------------------
      FTPOFF
      TELNETOFF
      SMTPOFF
      DNSOFF
      POP3OFF
      HTTPON930

      被測主機:www.asia.microsoft.com
      測試時間:10:39,June09,1998

      Internet服務狀態響應時間(ms)
      --------------------------------------------------


      日韩精品一区二区三区高清