摘要:該文闡述TCP通信的原理,多線程的概念,進行了一個多線程數(shù)據(jù)接收程序的設計,并使用C#編碼實現(xiàn)。
關鍵詞:多線程;C#;TCP
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2012)36-8624-02
某項目有一批終端設備定時發(fā)送定位信息到指定的服務器,服務器接收到信息處理后保存到數(shù)據(jù)庫,以備后續(xù)顯示使用。終端設備同服務器間通信采用TCP協(xié)議,一次信息發(fā)送完成后終端設備和服務器連接斷開。設備之間沒有信息交流,互相獨立。信息發(fā)送的時間由終端設備自行決定。
1關鍵技術
1.1TCP通信原理
TCP協(xié)議是傳輸控制協(xié)議,適用于點到點,可靠通信。把通信發(fā)起方稱為客戶,把客戶要通信的另一方稱為服務器??蛻舭颜埱蟀l(fā)給服務器,服務器收到客戶的請求后提供服務。所以,TCP通信有兩方,客戶和服務器。在本應用中,終端設備是TCP客戶,接收程序是TCP服務器。
1.2多線程
線程是程序中的一個執(zhí)行流。是CPU調(diào)度和分派的基本單位。一個進程可以包含一個或多個線程,并且同一個進程內(nèi)的多個線程共享一塊內(nèi)存和資源。
2需求分析
結合上述技術分析和應用要求,本應用中的終端機是TCP客戶,要開發(fā)的程序是TCP服務器,用于接收TCP客戶發(fā)送的定位信息并保存到數(shù)據(jù)庫。終端設備有多臺,且它們之間沒有聯(lián)系,任何終端信息發(fā)送時間是隨機的。
3系統(tǒng)分析
TCP協(xié)議要求通信雙方首先要建立連接,然后雙方才能進行信息的交流,最后撤除連接。
服務器應設置有監(jiān)聽端口,工作在監(jiān)聽狀態(tài)。當客戶想同服務器通信時,客戶可以向該端口發(fā)送連接請求,服務器收到連接請求后,可以建立新的通信鏈路以便客戶和服務器進行信息交流。等到客戶的通信結束后,服務器返回監(jiān)聽狀態(tài)。在返回監(jiān)聽狀態(tài)之前,服務器不能為其他客戶提供服務,因此,在單線程模式,當前客戶同服務器間的通信未結束前,其他客戶無法連接服務器,只有等到它們的通信結束,服務器重新回到監(jiān)聽狀態(tài)。這顯然是低效的,不合理的。為了快速的為更多的客戶服務,服務器應盡快地回到監(jiān)聽狀態(tài)。為了到達此目的,只有采用多線程工作模式。即,服務器同客戶建立連接后,服務器和客戶的通信和連接的撤除交由新的線程完成,自己迅速返回到監(jiān)聽狀態(tài),這必然的縮短了其他客戶的等待時間,提高了信息傳輸?shù)男省?/p>
4系統(tǒng)設計
設計思路:建立一個TCP服務器,運行后在指定的端口監(jiān)聽,當收到客戶的連接請求后,會創(chuàng)建新的線程負責隨后的雙方的通信,自己則回到監(jiān)聽狀態(tài)繼續(xù)監(jiān)聽有無其他客戶連接請求。新創(chuàng)建的線程在完成數(shù)據(jù)的接收后,斷開連接,釋放資源。
6測試及結果分析
測試過程:運行本服務程序,設置本機監(jiān)聽端口和協(xié)議,進入監(jiān)聽狀態(tài)。設置終端設備的數(shù)據(jù)接收服務器IP地址為114.96.57.176(需在路由器做映射到內(nèi)網(wǎng)IP地址:192.168.1.100),端口為5000,程序接收到終端設備發(fā)送的位置信息。結果見圖2。
圖2程序運行顯示界面截圖
從圖2顯示的信息看,信息已正確接收,程序運行正常。
參考文獻:
[1]RobinsonS.C#高級編程[M].北京:清華大學出版社,2002.
[2]CasadJ.TCP/IP入門經(jīng)典[M].井中月,譯.北京:人民郵電出版社,2009.
[3]周有杰.VisualC#.Net網(wǎng)絡核心編程[M].北京:清華大學出版社,2002.