摘要:伴隨著互聯(lián)網(wǎng)技術(shù)的進(jìn)步和信息技術(shù)的發(fā)展,網(wǎng)絡(luò)應(yīng)用程序的開發(fā)越來越普遍,應(yīng)用越來越廣泛。文章以基于WinSock的網(wǎng)絡(luò)應(yīng)用程序的開發(fā)研究為中心話題,重點(diǎn)介紹了套接字的相關(guān)知識(shí)、面向連接的套接字編程原理等內(nèi)容。其中包括套接字的概念、套接字的分類、服務(wù)器端程序關(guān)鍵代碼的實(shí)現(xiàn)、客戶機(jī)端程序關(guān)鍵代碼的實(shí)現(xiàn)等方面。希望能夠引起人們對網(wǎng)絡(luò)應(yīng)用程序開發(fā)的進(jìn)一步重視,對實(shí)際工作能夠發(fā)揮一定的指導(dǎo)作用。
關(guān)鍵詞:網(wǎng)絡(luò)應(yīng)用程序;套接字;編碼;服務(wù)器端程序
中圖分類號(hào):TP311.10 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1674-7712 (2012) 16-0077-01
一、引言
近年來,計(jì)算機(jī)技術(shù)取得了突飛猛進(jìn)的發(fā)展,與之相伴的網(wǎng)絡(luò)應(yīng)用軟件的開發(fā)也越來越多,生產(chǎn)實(shí)踐也需要更多的網(wǎng)絡(luò)應(yīng)用軟件,以滿足人們的實(shí)際需求。在這樣的背景之下,各種各樣的網(wǎng)絡(luò)編程技術(shù)相繼出現(xiàn),并得到了運(yùn)用和發(fā)展。在網(wǎng)絡(luò)應(yīng)用程序開發(fā)中,使用套接字的方式,進(jìn)而實(shí)現(xiàn)互聯(lián)網(wǎng)上的進(jìn)程通訊,以達(dá)到網(wǎng)絡(luò)應(yīng)用的各種功能,這是目前在網(wǎng)絡(luò)應(yīng)用程序開發(fā)中的一種十分重要的方法,也具有廣泛的應(yīng)用。文章主要介紹基于WinSock的網(wǎng)絡(luò)應(yīng)用程序的開發(fā)問題,希望能夠引起人們對這一網(wǎng)絡(luò)應(yīng)用程序開發(fā)的重視。
二、套接字的相關(guān)知識(shí)
套接字的相關(guān)知識(shí)比較多,在這里不一一介紹,重點(diǎn)介紹它的概念和分類。
(一)套接字的概念
網(wǎng)絡(luò)編程,也就是人們所說的編寫基于互聯(lián)網(wǎng)的應(yīng)用程序。首先,這個(gè)程序需要形成網(wǎng)絡(luò)通訊管道,它是利用TCP/IP協(xié)議棧形成的,使得網(wǎng)絡(luò)上的通訊得以完成。只有這些事情完成之后,才能開發(fā)網(wǎng)絡(luò)應(yīng)用程序。在網(wǎng)絡(luò)應(yīng)用開發(fā)的過程中,套接字是使得進(jìn)程通信得以實(shí)現(xiàn)的得力工具。從使用的效果來看,套接字是進(jìn)程通信斷點(diǎn)的抽象,它能夠提供交換數(shù)據(jù)機(jī)制。從實(shí)現(xiàn)上來說,套接字不是別的東西,而是一個(gè)軟件機(jī)構(gòu),在這個(gè)機(jī)構(gòu)里面,包含著一定的數(shù)據(jù)結(jié)構(gòu)。而從使用上來說,套接字就是一個(gè)編程的接口,好比插座一般,使得機(jī)器的用電變得十分方便。為了能夠比較方便的網(wǎng)絡(luò)通訊功能,程序通過綁定套接字的方式進(jìn)行。在位置上,套接字位于通訊域中,在同一個(gè)域中,不同的套接字之間進(jìn)行數(shù)據(jù)的交換。事實(shí)上,Socket能夠使用的通訊協(xié)議棧不僅一種,而是多種多樣的。在網(wǎng)路層,IP尋找路由,實(shí)現(xiàn)數(shù)據(jù)在不同主機(jī)之間的交換。而在傳輸層,它是通過端口,從而實(shí)現(xiàn)端到端的傳輸服務(wù)。
(二)套接字的分類
在套接字的分類上,主要包括兩種:流式套接字和數(shù)據(jù)報(bào)套接字,用戶可以根據(jù)實(shí)際情況進(jìn)行選擇。第一、流式套接字具有以下特點(diǎn):它與電話系統(tǒng)比較相類似,并且能夠提供流傳輸服務(wù),這種服務(wù)既是可靠的,同時(shí)也是面向連接的。要實(shí)現(xiàn)完整的數(shù)據(jù)傳輸,都有必要經(jīng)過以下三個(gè)程序:建立連接、使用連接、終止連接。從本質(zhì)上來看,連接是一個(gè)管道,數(shù)據(jù)連接的時(shí)候,它是從一端流入,從另外一端流出的過程,只不過是順序不一致而已,但是內(nèi)容相同,正因?yàn)檫@樣,流式套接字在實(shí)踐中的運(yùn)用越來越廣泛。第二、數(shù)據(jù)報(bào)套接字具有以下幾個(gè)特點(diǎn):它能夠提供數(shù)據(jù)報(bào)傳輸服務(wù),并且這種服務(wù)是無連接的,它能夠支持雙向的數(shù)據(jù)流。數(shù)據(jù)的傳輸與郵政系統(tǒng)有點(diǎn)類似,它是通過相互獨(dú)立的數(shù)據(jù)報(bào)進(jìn)行傳輸?shù)摹?shù)據(jù)報(bào)套接字在傳輸?shù)倪^程中,各分組在系統(tǒng)中是獨(dú)立的,不過不能保證分組的先后順序,對于出錯(cuò)的分組也不能進(jìn)行恢復(fù)或者是重新傳輸。
三、面向連接的套接字編程原理
面向連接的套接字編程原理比較復(fù)雜,文章主要從以下兩個(gè)方面進(jìn)行介紹,服務(wù)器端和客戶機(jī)端程序關(guān)鍵代碼的實(shí)現(xiàn)。
(一)服務(wù)器端程序關(guān)鍵代碼的實(shí)現(xiàn)
在程序啟動(dòng)的時(shí)候,對于面向連接的套接字編程。服務(wù)器和客戶機(jī)都有必要通過WSAStartup(),這樣才能夠完成對Windows Socket DLL的加載,并且還能夠?qū)μ捉幼值陌姹具M(jìn)行立即的檢查,當(dāng)對WSAStartup()的調(diào)用成功之后,在這個(gè)時(shí)候,應(yīng)用程序才可以調(diào)用Windows Socket DLL中的其他函數(shù)。當(dāng)上述步驟完成之后,接下來是定義服務(wù)器端的地址和端口號(hào)。完成對結(jié)構(gòu)對象各成員的設(shè)置。當(dāng)服務(wù)器端套接字調(diào)用完listen()函數(shù)之后,然后有必要完成accept()函數(shù)的調(diào)用。在該系統(tǒng)中,進(jìn)行的是有連接的數(shù)據(jù)傳輸,所以,如果有數(shù)據(jù)到達(dá)的話,只需要調(diào)用recv()函數(shù),從套接字將數(shù)據(jù)取出來就可以了,既能夠?qū)崿F(xiàn)通訊和所要達(dá)到的目的。
(二)客戶機(jī)端程序關(guān)鍵代碼的實(shí)現(xiàn)
事實(shí)上,在編程方面,與服務(wù)器端的設(shè)計(jì)相比而言,面向連接套接字的客戶機(jī)端的設(shè)計(jì)要簡單得多。它的操作比較簡單,只要在流式套接字創(chuàng)建完成之后,調(diào)用connect()函數(shù),向在其啟動(dòng)之前就工作的服務(wù)器套接字提出連接請求,然后成功返回,通過這樣的操作就能夠完成與服務(wù)器的連接工作。當(dāng)連接建立之后,就可以實(shí)現(xiàn)與服務(wù)器數(shù)據(jù)的傳輸,這個(gè)傳輸是通過recv()函數(shù)和send()函數(shù)實(shí)現(xiàn)的。值得注意的是,客戶機(jī)在調(diào)用connect()函數(shù)的時(shí)候,有必要通過參數(shù)指出相關(guān)的信息,比如服務(wù)器的IP地址,端口號(hào)等等。
四、結(jié)束語
通過上述的介紹我們可以得知,在網(wǎng)絡(luò)應(yīng)用程序的開發(fā)中,使用Socket能夠收到良好的效果,能夠屏蔽網(wǎng)絡(luò)低層復(fù)雜的結(jié)構(gòu)和協(xié)議。這樣一來,使用Socket開發(fā)的軟件適用性比較強(qiáng),能夠在各種網(wǎng)上運(yùn)行,從而不必要擔(dān)心是什么類型的網(wǎng)絡(luò)或者是服務(wù)器。并且,該應(yīng)用軟件可以比較容易的實(shí)現(xiàn)異構(gòu)網(wǎng)的互連,操作也簡單方便。除此之外,使用Socket開發(fā)的網(wǎng)絡(luò)應(yīng)用軟件還有一個(gè)顯著的特點(diǎn),那就是程序的結(jié)構(gòu)十分清楚明了,升級(jí)和維護(hù)也十分方便,在實(shí)踐中值得進(jìn)一步推廣和應(yīng)用。
參考文獻(xiàn):
[1]趙志誠,徐玉斌,高慧敏,曾建潮.基于C/S模式的Winsock網(wǎng)絡(luò)通信程序的開發(fā)[J].計(jì)算機(jī)工程,2000(4).
[2]李鐳,喻金科,肖永生.基于Delphi下Winsock的應(yīng)用程序開發(fā)與研究[J].南昌航空工業(yè)學(xué)院學(xué)報(bào)(自然科學(xué)版),2006(3).
[3]樊佩佩,王平崗.基于VB的Winsock控件遠(yuǎn)程通信的實(shí)現(xiàn)[J].邢臺(tái)職業(yè)技術(shù)學(xué)院學(xué)報(bào),2011(5).
[4]蔣東興,林鄂華,陳祺德.WindowsSockets網(wǎng)絡(luò)程序沒計(jì)大全[M].北京:清華大學(xué)出版社,1999.
[5]趙曉輝,危建國.基于WinSock的網(wǎng)絡(luò)應(yīng)用程序的開發(fā)[J].西南民族大學(xué)學(xué)報(bào)(自然科學(xué)版),2007(1).