Internet服務(wù)端口測試程序的設(shè)計與完成
發(fā)表時間:2024-02-23 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]作者: 北京國創(chuàng)信息技術(shù)產(chǎn)業(yè)公司 雷進 一、程序的實用背景 上網(wǎng)的朋友越來越多,遇到的問題也越來越多,最常見的就是關(guān)于域名服務(wù)器(DNS)、郵件服務(wù)(SMTP)和POP3的配置問題。例如,選用哪一個DNS,202.96.0.133還是202.96.26.243?記不清ISP的郵件服務(wù)器和域名服務(wù)...
作者: 北京國創(chuàng)信息技術(shù)產(chǎn)業(yè)公司 雷進
一、程序的實用背景
上網(wǎng)的朋友越來越多,遇到的問題也越來越多,最常見的就是關(guān)于域名服務(wù)器(DNS)、郵件服務(wù)(SMTP)和POP3的配置問題。例如,選用哪一個DNS,202.96.0.133還是202.96.26.243?記不清ISP的郵件服務(wù)器和域名服務(wù)器的IP地址,202.96.26.243還是245?
另外一個問題就是,我們在下載文件的時候,往往面臨從多個不同主機下載的選擇(象sunsite有數(shù)十個鏡像站點)。那么,選擇哪一個站點進行下載是最快的呢?
筆者為此編寫了一個應(yīng)用程序,試圖對Internet的常用的網(wǎng)絡(luò)通信端口(如Web、Email、FTP等)進行連接測試,獲得服務(wù)端口的狀態(tài)和響應(yīng)時間指標,從而為我們更有效的使用Internet提供準確的參考數(shù)據(jù)。筆者為該程序命名為Tester(測試者),從后面敘述不難發(fā)現(xiàn),Tester還可以作為簡單的Internet系統(tǒng)性能測試工具來使用。
雖然Tester也涉及了其它的編程方法,但就總體而言,Tester屬于Socket應(yīng)用程序。所以我們先從Socket編程的模型入手,介紹Tester 程序的設(shè)計與實現(xiàn)。
二、Socket編程模型
Socket是網(wǎng)絡(luò)通信的一個端點。我們知道,網(wǎng)絡(luò)通信通常指兩臺主機或兩個進程,通過網(wǎng)絡(luò)傳遞它們之間的數(shù)據(jù),這樣的過程可以理解為網(wǎng)絡(luò)的一次對話(Session)。網(wǎng)絡(luò)對話的每一端就成為網(wǎng)絡(luò)通信的端點,即網(wǎng)絡(luò)通信實體的最小單位。當使用Socket接口對網(wǎng)絡(luò)通信編程時,Socket是網(wǎng)絡(luò)通信過程中端點的抽象表示。大多數(shù)網(wǎng)絡(luò)通信采用客戶/服務(wù)器模型,客戶/服務(wù)器模型按照端點的工作性質(zhì)來區(qū)分通信雙方的端點。例如,客戶/服務(wù)器模型將啟動網(wǎng)絡(luò)服務(wù)請求的端點視作客戶進程或客戶程序;對客戶請求作出響應(yīng)的端點是服務(wù)器進程或服務(wù)器程序。
為了進行網(wǎng)絡(luò)通信,程序在網(wǎng)絡(luò)的對話的每一端都需要一個Socket,即客戶端的Socket和服務(wù)器端的Socket。兩個Socket之間的連接可以是面向連接的也可以是無連接的。雖然從目前看,Socket編程已經(jīng)不再局限于UNIX 系統(tǒng),但是Socket接口在網(wǎng)絡(luò)通信時仍然使用UNIX系統(tǒng)I/O概念,Socket接口模型仍然采用Open-Read-Write-Close方式。Socket編程的包括幾個主要步驟:
1、建立Socket;
2、配置Socket;
3、通過Socket發(fā)送數(shù)據(jù);
4、通過Socket接收數(shù)據(jù);
5、關(guān)閉Socket。
三、CSocket編程模型
對于網(wǎng)絡(luò)通信編程的初學(xué)者來說,直接使用上述的socket模型會感覺困難和復(fù)雜。VisualC++的MFC(基礎(chǔ)類庫)提供了一些封裝好的對象可供使用,這些對象的概念相對簡單,編程相對容易。Tester程序就是使用MFC的幾個與socket相關(guān)的類來實現(xiàn)的。
在服務(wù)器Socket和客戶Socket之間建立通信的過程如下文所述。
1、創(chuàng)建CSocket對象。
2、使用該對象產(chǎn)生SOCKET句柄。
3、如果socket是客戶,調(diào)用CAsyncSocket::Connect,連接本地的Socket和服務(wù)器Socket;
如果socket是服務(wù)器,調(diào)用CAsyncSocket::Listen,開始偵聽從客戶端來的訪問請求,如果收到請求,調(diào)用CAsyncSocket::Accept進行接收處理。
4、建立CSocketFile對象,并且使該對象與CSocket對象具備一定的聯(lián)系;
5、建立CArchive對象,以便實現(xiàn)卸裝(接收)數(shù)據(jù)和存儲(發(fā)送)數(shù)據(jù)的目的。當然,該CArchive對象應(yīng)該與前面的CSocketFile對象建立聯(lián)系;
6、使用CArchive對象在客戶和服務(wù)器socket 之間傳遞數(shù)據(jù),從而實現(xiàn)服務(wù)器socket和客戶機socket之間的通信。值得注意的是,一個給定的CArchive對象只能在單一的方向上傳遞數(shù)據(jù):或者接收或者發(fā)送。一般情況下,可能需要兩個CArchive對象來實現(xiàn)數(shù)據(jù)的雙向傳遞。
7、解析archive、socketfile、socket對象。
四、程序的實現(xiàn)
簡單地講,對于程序的實現(xiàn),筆者主要考慮了三部分的內(nèi)容:Socket、時鐘以及界面。
Socket(網(wǎng)絡(luò)通信實體)
Tester作為一個客戶端的socket通信程序,包括TestSocket(Csocket派生類)、TestSocketFile(CSocketFile派生類)和TestArchiveIn、TestArchiveOut(CArchive派生類)等。這些對象的建立和使用與上述的CSocket編程模型相同。
時鐘(用于測試網(wǎng)絡(luò)上Internet服務(wù)端口的響應(yīng)時間)
Tester在Socket連接建立的前后分別調(diào)用clock系統(tǒng)函數(shù),從而可以利用二者的相對差別獲得絕對時間參數(shù)。clock函數(shù)可以獲得某一系統(tǒng)調(diào)用過程所耗費的時間。clock函數(shù)的返回值是處理器的計時單位次數(shù)。Tester的時間單位是毫秒。
...... //其它代碼
clock_tstart=clock();
if(m_pSocket->Connect(lpszAddress,nPort))
{
clock_tend=clock();
...... //其它代碼
}
else
{
clock_tend=clock();
...... //其它代碼
}
...... //其它程序段
從程序中可以看出,Tester記錄的響應(yīng)時間,是指處理器在整個網(wǎng)絡(luò)通信的連接建立過程中的響應(yīng)時間。這一結(jié)果和網(wǎng)絡(luò)狀況、服務(wù)器端的響應(yīng)時間、本地系統(tǒng)的性能均有關(guān)系。實際上,網(wǎng)絡(luò)用戶在實際應(yīng)用過程中真正的時間延遲,就是上述各個因素的總和。另外,Tester的響應(yīng)時間結(jié)果是10次測試的平均數(shù)。所以,Tester測試的是整個網(wǎng)絡(luò)應(yīng)用的響應(yīng)時間,是綜合的指標。
界面(與程序使用者進行交互,指令的輸入和結(jié)果的輸出)
1、輸入部分
Tester使用了對話框?qū)ο螅篠etupDlg::CDialog,在對話框中,使用Check、Edit等控制件,并且通過這些控制向程序傳遞使用者所指示的測試信息。
2、輸出部分
Tester是單文檔界面(SDI)的應(yīng)用程序。窗口風格見下面程序段:
......//其它代碼
CEditView::PreCreateWindow(cs);
cs.style=AFX_WS_DEFAULT_VIEW WS_VSCROLL
ES_AUTOHSCROLL ES_AUTOVSCROLL ES_MULTILINE
ES_NOHIDESEL ES_READONLY;
......//其它代碼
利用Tester的菜單功能可以把每次的測試結(jié)果存為純文本格式的文件。
五、程序的應(yīng)用舉例
Tester對于熟悉Internet應(yīng)用的使用者來說,界面一目了然,操作十分簡單。首先,使用者根據(jù)測試需要填寫參數(shù)設(shè)置對話框;確認后,由Tester程序自動執(zhí)行測試工作,并將測試結(jié)果顯示于Tester窗口中。同時,用戶也可以將測試結(jié)果存為文本文件。
Tester的用戶可以自定義一些服務(wù)端口進行測試(例如,對話框中沒有列出的Gopher等Internet服務(wù))。當然,在這種情況下,用戶必須知道被測試的服務(wù)的Socket端口號。
下面給出幾個測試結(jié)果文件,僅供參考(筆者經(jīng)由2631撥號上網(wǎng)進行測試)。
被測主機:163.net
測試時間:10:37,June09,1998
Internet服務(wù)狀態(tài)響應(yīng)時間(ms)
------------------------------------------------
FTPOFF
SMTPON2030
DNSOFF
POP3ON1050
HTTPON380
被測主機:ihw.com.cn
測試時間:10:38,June09,1998
Internet服務(wù)狀態(tài)響應(yīng)時間(ms)
--------------------------------------------
FTPOFF
SMTPON3670
POP3ON720
HTTPOFF
被測主機:www.yahoo.com
測試時間:10:38,June09,1998
Internet服務(wù)狀態(tài)響應(yīng)時間(ms)
------------------------------------------
FTPOFF
TELNETOFF
SMTPOFF
DNSOFF
POP3OFF
HTTPON1700
被測主機:www.microsoft.com
測試時間:10:39,June09,1998
Internet服務(wù)狀態(tài)響應(yīng)時間(ms)
----------------------------------------------------
FTPOFF
TELNETOFF
SMTPOFF
DNSOFF
POP3OFF
HTTPON930
被測主機:www.asia.microsoft.com
測試時間:10:39,June09,1998
Internet服務(wù)狀態(tài)響應(yīng)時間(ms)
--------------------------------------------------