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