摘要:計算機網(wǎng)絡編程目前應用普遍的就是在WINDOWS平臺上,以C語言為編程語言,實現(xiàn)局域網(wǎng)內(nèi)的即時通信工功能即聊天的功能。本設計是基于Windows?Socket的編程,分別在同一局域網(wǎng)內(nèi)的兩臺PC機的VC++?6.0平臺上運行服務端和客戶端程序。服務器與客戶端在Windows7?環(huán)境下采用了TCP/IP連接方式,由客戶端登錄到服務端PC機,實現(xiàn)客戶端與服務端PC的信息傳輸。
關鍵詞:網(wǎng)絡編程;程序設計;VC++6.0;socket;TCP/IP;C語言
一、網(wǎng)絡編程的意義
本系統(tǒng)采用基于Socket的方法實現(xiàn)局域網(wǎng)通信,基于Socket的局域網(wǎng)通信軟件可以為企業(yè)原有的局域網(wǎng)提供一種良好,安全,快速的通信機制。它的實現(xiàn)無需對企業(yè)原有的局域網(wǎng)硬件進行任何改動,具有實現(xiàn)成本低廉的優(yōu)點,它的使用能有效地降低局域網(wǎng)通信負荷,提高局域網(wǎng)的使用效率,可以很好地解決企業(yè)內(nèi)部局域網(wǎng)的各種通信需求。
基于Socket的局域網(wǎng)聊天工具很好地詮釋了Socket通信的原理,并且在企業(yè)內(nèi)部通信、教學、討論等應用中都具有一定的實用價值。它具有信息收發(fā)速度快,保密性好,占用網(wǎng)絡帶寬資源低,占用服務器吞吐能力低,易于編程實現(xiàn)等優(yōu)點[3] ?;赟ocket的局域網(wǎng)通信軟件應用范圍廣闊,不但可以處理傳統(tǒng)的通信需求,而且也能擴展以適應新型的網(wǎng)絡應用,如網(wǎng)絡教育,數(shù)據(jù)影音傳輸?shù)?,擁有廣泛的應用前景。
二、網(wǎng)絡編程的應用
目前國內(nèi)外做聊天系統(tǒng)的公司很多,產(chǎn)品也琳瑯滿目,國內(nèi)有諸如騰訊QQ、新浪UC、網(wǎng)易泡泡等,國外有著名的MSN(新版改名為Live?Messenger)以及跨平臺Gaim等。本人取最具代表性的QQ和MSN進行了一些研究,作為開發(fā)聊天系統(tǒng)的準備。
騰訊無疑是國內(nèi)即時通訊市場的霸主,自從99年進入即時通訊領域并迅速占市場之后,其在國內(nèi)用戶數(shù)量始終高居榜首,即使近幾年面對微軟MSN的強大攻勢,騰訊QQ的時常占有率依然穩(wěn)步增長。騰訊的成功與其對QQ的不斷創(chuàng)新和完善是分不開的。
參考了許多網(wǎng)絡上的資料,以及自己通過觀察騰訊QQ運行時的各種細節(jié)??梢源_定騰訊QQ是以多服務器提供服務、服務器總控客戶端、客戶端之間UDP直連通信的。并且在兩個客戶端之間不能建立直連的情況下,才由服務器進行中轉通信。與騰訊QQ不同,微軟的MSN?Messenger只使用了TCP作為傳輸層通信協(xié)議,所有客戶端與服務器進行連接,然后通過與服務器的TCP連接進行中轉通信。
騰訊使用的模型中,服務器主要處理客戶端各種狀態(tài)的控制,可以極大減輕服務器的處理壓力,但其內(nèi)部協(xié)議和實現(xiàn)復雜度都較高。而MSN?Messenger所有數(shù)據(jù)都要經(jīng)過服務器,服務器壓力可想而知(難怪平時很少見到使用MSN進行語音視頻聊天的)。
上述軟件都實現(xiàn)了廣域網(wǎng)上的即時通信,在使用方面各有特色,在實現(xiàn)方面也各有所長。但是隨著企業(yè)規(guī)模的擴大,業(yè)務量的增加,企業(yè)內(nèi)部的信息越來越私密,企業(yè)只希望員工通過內(nèi)部局域網(wǎng)進行溝通與交流,避免企業(yè)內(nèi)部機密通過Internet泄露到外部,所以局域網(wǎng)的聊天工具也占了很大的市場[4] 。
三、網(wǎng)絡編程的工具
VC6.0是微軟推出的一款可視化編程工具,適用面非常廣泛。VC6.0包含了一個文本編輯器、資源編輯器、工程編譯工具、一個增量連接器、源代碼瀏覽器、集成調(diào)試工具,以及一套聯(lián)機文檔。使用VC6.0,可以完成創(chuàng)建、調(diào)試、修改應用程序等的各種操作。
VC6.0采用標準的多窗口Windows用戶界面,并增加了一些新特性,使得開發(fā)環(huán)境更易于使用,用戶很容易學會它的使用方法。
由于VC6.0是一個可視化的開發(fā)工具,在介紹VC6.0的各個組成部分之前,首先了解一下可視化編程的概念。可視化技術是當前發(fā)展迅速并引人注目的技術之一,它的特點是把原來抽象的數(shù)字、表格、功能邏輯等用直觀的圖形、圖象的形式表現(xiàn)出來??梢暬幊淌撬闹匾獞弥?。所謂可視化編程,就是指:在軟件開發(fā)過程中,用直觀的具有一定含義的圖標按鈕、圖形化的對象取代原來手工的抽象的編輯、運行、瀏覽操作,軟件開發(fā)過程表現(xiàn)為鼠標點擊按鈕和拖放圖形化的對象以及指定對象的屬性、行為的過程。這種可視化的編程方法易學易用,而且大大提高了工作效率。
所謂socket通常也稱作"套接字",應用程序通常通過"套接字"向網(wǎng)絡發(fā)出請求或者應答網(wǎng)絡請求。Socket和ServerSocket類庫位于java.net包中。ServerSocket用于服務器端,Socket是建立網(wǎng)絡連接時使用的。在連接成功時,應用程序兩端都會產(chǎn)生一個Socket實例,操作這個實例,完成所需的會話。對于一個網(wǎng)絡連接來說,套接字是平等的,并沒有差別,不因為在服務器端或在客戶端而產(chǎn)生不同級別。不管是Socket還是ServerSocket它們的工作都是通過SocketImpl類及其子類完成的。
Socket原來是UNIX的Berkeley?Software?Distributiion版本中的一個程序接口,屬于系統(tǒng)調(diào)用。在Windows操作系統(tǒng)下,WinSock是定義于視窗應用程序與網(wǎng)絡之間的標準界面。程序設計者利用WinSock的標準規(guī)格,完全不考慮所使用的網(wǎng)卡硬件部分,WinSock所提供的動態(tài)連接程序庫(WS2_32.DLL)完成與網(wǎng)絡底層驅動程序協(xié)同的工作,WinSock采用套接字(端口號+IP地址)方式建立與網(wǎng)絡上其他計算機的連接。
四、網(wǎng)絡編程的流程
首先啟動聊天室的服務端,設置端口,打開監(jiān)聽。然后啟動客戶端(可啟動多個),設置用戶昵稱和連接端口等信息,連接服務器。進入聊天室后用戶之間可以進行簡單的文字聊天。當用戶發(fā)送信息后,服務器會收到用戶發(fā)送的信息,然后服務器把收到的信息發(fā)送給所有在線用戶。這樣登入服務器的用戶們之間就可以進行簡單的文字聊天了。當用戶進入聊天室后,服務器會發(fā)送相應的消息通知該用戶進入了聊天室。當用戶斷開連接后,服務器也會通知該用戶下線。整個聊天室基于CSocket的流式連接放大?;赥CP傳送控制協(xié)議。該協(xié)議所要求用戶必須先確定連接成功后才能發(fā)送消息,如果是UDP協(xié)議那可以不進行連接過程,這樣實時性比較好。
五、結語
網(wǎng)絡編程的聊天系統(tǒng)的設計跟普通網(wǎng)站設計有著許多不同的地方,普通網(wǎng)站設計所考慮的因素,例如,普通網(wǎng)站需要對布局進入大量美化以及動畫設計等等,而聊天室只要提供滿足訪客雙方直接實時聊天即可。在Internet上的聊天程序一般都是以服務器提供服務端連接響應,使用者通過客戶端程序登錄到服務器,就可以與登錄在同一服務器上的用戶交談,這是一個面向連接的通信過程。因此,程序要在TCP/IP環(huán)境下,實現(xiàn)服務器端和客戶端兩部分程序。
參考文獻:
[1] 李凌.WinSock?2網(wǎng)絡編程實用教程[M].北京:清華大學出版社,2005.
[2] 馮宏華,徐瑩.C++應用程序性能優(yōu)化[M].北京:電子工業(yè)出版社,2007.
[3] 張虹.軟件工程與軟件開發(fā)工具[M].北京:清華大學出版社,2009.
作者簡介:
代承坤(1982.3)男,漢,云南曲靖,云南工業(yè)技師學院,大學本科,講師,研究方向:計算機程序設計。
(作者單位:云南工業(yè)技師學院)