1. Winsock控件基礎(chǔ)
Winsock控件在程序設(shè)計(jì)時,看不到這個控件顯現(xiàn)在執(zhí)行的窗體之中,但是它可以提供有關(guān)網(wǎng)絡(luò)通訊方面的程序設(shè)計(jì)依據(jù)。此外,在這個控件的使用上,您可以非常容易地要求控件為您調(diào)用TCP或是UDP網(wǎng)絡(luò)服務(wù)的功能。因此,當(dāng)您在編寫有關(guān)住從式架構(gòu)的應(yīng)用程序時,您可以不需要了解TCP通訊協(xié)議或是低級的Winsock api調(diào)用方式。
通常,以筆者的經(jīng)驗(yàn),除了必須與標(biāo)準(zhǔn)通訊協(xié)議進(jìn)行互動外,僅僅是進(jìn)行一般性相互通訊、交換數(shù)據(jù)時,Winsock控件可以滿足您的要求。因此您可以非常容易地通過屬性的設(shè)置以及控制方法的調(diào)用,與遠(yuǎn)程的設(shè)備進(jìn)行連接并且相互交換信息。關(guān)于這些應(yīng)用方面以及調(diào)用方式,筆者將在接下的探索中,慢慢地研究Winsock的應(yīng)用方式。
1-1TCP基礎(chǔ)
不論是在Internet或是Internet網(wǎng)絡(luò)之中,以目前流行的趨勢,多半都會使用TCP協(xié)議來進(jìn)行遠(yuǎn)程設(shè)備的連接。TCP協(xié)議的全名為“傳輸控制協(xié)議(transfer control protocol)”,這是一種在Internet上使用的 主要協(xié)議,例如http,ftp,smtp等,都是屬于這個中面向連接的協(xié)議。因此,當(dāng)您 使用TCP協(xié)議連接兩個網(wǎng)絡(luò)上的設(shè)備時,將可以在它們之間交換希望交換的數(shù)據(jù)。
同時,如果您開發(fā)的應(yīng)用程序?qū)儆谥鲝氖綉?yīng)用架構(gòu)(或是n-tear(多層次))應(yīng)用系統(tǒng)時,將必須要知道應(yīng)用系統(tǒng)主機(jī)的ip地址(利用RemoteHost屬于取得)以及連接端口號(利用remoteport屬于取得)。在這些數(shù)據(jù)完全備齊之后,您才可以進(jìn)行進(jìn)一步的調(diào)用、連接。
因此,如果正在建立主機(jī)端應(yīng)用程序時,必須指定本機(jī),必須指定本機(jī)(執(zhí)行應(yīng)用程序所在的計(jì)算機(jī))所用的連接端口號(localport屬于),接著將Winsock控件設(shè)置為“監(jiān)聽(listen)”,即可等候遠(yuǎn)程客戶端進(jìn)行調(diào)用與連接。因此,當(dāng)主機(jī)端接收到客戶端調(diào)用并且要求連接的信息時,將會觸發(fā)“要求連接()”的事件,接著進(jìn)行標(biāo)準(zhǔn)“允許”或是“拒絕”的程序。
一旦主機(jī)端與客戶端連接完成之后,您將可以開始使用“傳送數(shù)據(jù)(senddata)”方法,將數(shù)據(jù)傳送給對方,并且利用“傳送完成(sendcomplete)”事件,來檢測數(shù)據(jù)是否傳送完畢。同時,在數(shù)據(jù)傳達(dá)對方的計(jì)算機(jī)時,將會觸發(fā)對方計(jì)算的“接收數(shù)據(jù)(dataarrival)”事件。此時,您可以使用“取得數(shù)據(jù)(getdata)”方法,來去出這些接收到的數(shù)據(jù)。
上述的程序?qū)⒅芏鴱?fù)始地發(fā)生,直到發(fā)生“中斷連接(closed)”事件或是不正常斷線為止。這種連接與數(shù)據(jù)傳輸?shù)姆绞?,則是屬于Winsock控件TCP協(xié)議的運(yùn)行特色。圖1-1所示為使用TCP連接的運(yùn)行模式。
1-2 UDP基礎(chǔ)
相對于TCP面向連接的協(xié)議則是屬于UDP非面向連接協(xié)議,UDP協(xié)議的全名是“用戶數(shù)據(jù)報(bào)協(xié)議(user datagram protocol)”,其運(yùn)行方式明顯與TCP協(xié)議有所不同。一般來說,使用UDP協(xié)議并沒有所謂的主機(jī)端或是客戶端的限制,您可以依據(jù)需求任意對調(diào)用主機(jī)端與客戶端的角色。
因此,在數(shù)據(jù)傳輸之前,您必須要先設(shè)置好本機(jī)端所使用的連接端口(localport屬于所指定的)。因此,在本機(jī)上必須設(shè)置遠(yuǎn)方主機(jī)的ip地址(RemoteHost屬性所指定的)以及連接端口號(remoteport),并且使用這個屬性的內(nèi)容與遠(yuǎn)程設(shè)備進(jìn)行連接。相對的,遠(yuǎn)程主機(jī)的本機(jī)連接端口則為調(diào)用端的遠(yuǎn)程連接端口號,而遠(yuǎn)程主機(jī)的“遠(yuǎn)程主機(jī)ip地址(RemoteHost屬性)”則為調(diào)用端的本機(jī)ip地址。
為了讓您可以對UDP協(xié)議有更清楚的了解,請參照下面的圖:
在完成連接之后,即可通過連接到遠(yuǎn)程的連接端口,使用senddata方法,將數(shù)據(jù)傳送到遠(yuǎn)程的主機(jī)上。遠(yuǎn)程的主機(jī)一旦接收到數(shù)據(jù),將會立即觸發(fā)dataarrival事件,此時您可以使用getdata方法,來取得遠(yuǎn)程所傳送的數(shù)據(jù)。 上面闡述了有關(guān)TCP和UDP的一些連接原理,至于Winsock的屬性、方法、事件在此不做介紹有關(guān)資料都有詳細(xì)的說明。
2021-07-09
2021-07-08
2021-07-08
2021-07-08
2021-07-08
2021-07-08
2021-07-07
2021-07-07
2021-07-07
2021-07-07
2021-07-07
2021-07-06
2021-07-06
2021-07-06
工作態(tài)度怎么寫 具有穩(wěn)定的工作心態(tài)
2021-07-06
該文觀點(diǎn)僅代表作者本人,查查吧平臺系信息發(fā)布平臺,僅提供信息存儲空間服務(wù),不承擔(dān)相關(guān)法律責(zé)任。圖片涉及侵權(quán)行為,請發(fā)送郵件至85868317@qq.com舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。