版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1c#編程三劍客編程三劍客c#網(wǎng)絡應用編程基礎網(wǎng)絡應用編程基礎馬駿主編馬駿主編 基礎知識部分,適用于初學者?;A知識部分,適用于初學者。c#網(wǎng)絡應用高級編程網(wǎng)絡應用高級編程馬駿、鄭逢斌、沈夏炯編著馬駿、鄭逢斌、沈夏炯編著 高級編程部分,適用于高級開發(fā)者。高級編程部分,適用于高級開發(fā)者。c#網(wǎng)絡應用編程開發(fā)實例與實驗指導網(wǎng)絡應用編程開發(fā)實例與實驗指導馬駿編著馬駿編著 上機題與項目開發(fā)實例(從設計到安裝程序制作一網(wǎng)打盡)。上機題與項目開發(fā)實例(從設計到安裝程序制作一網(wǎng)打盡)。2 c#網(wǎng)絡應用高級編程網(wǎng)絡應用高級編程 3第第1章章 進程、線程與網(wǎng)絡協(xié)議進程、線程與網(wǎng)絡協(xié)議1.1 進程和線程進程和線程
2、 1.2 ip地址與端口地址與端口 1.3 套接字套接字 1.4 網(wǎng)絡流網(wǎng)絡流 41.1 進程和線程進程和線程u 進程是對一段靜態(tài)指令序列(程序)的動態(tài)進程是對一段靜態(tài)指令序列(程序)的動態(tài)執(zhí)行過程,是系統(tǒng)進行資源分配和調(diào)度的一個執(zhí)行過程,是系統(tǒng)進行資源分配和調(diào)度的一個基本單位?;締挝?。 與進程相關(guān)的信息包括與進程相關(guān)的信息包括:進程的用戶標志、正進程的用戶標志、正在執(zhí)行的已經(jīng)編譯好的程序、進程程序和數(shù)據(jù)在執(zhí)行的已經(jīng)編譯好的程序、進程程序和數(shù)據(jù)在存儲器中的位置等。在存儲器中的位置等。 同一個進程又可以劃分為若干個獨立的執(zhí)行同一個進程又可以劃分為若干個獨立的執(zhí)行流,我們稱之為流,我們稱之為線程
3、線程。線程可以看作是進程的。線程可以看作是進程的一個實例,是一個實例,是cpu調(diào)度和分配的基本單位。在調(diào)度和分配的基本單位。在windows環(huán)境下,用戶可以同時運行多個應用環(huán)境下,用戶可以同時運行多個應用程序,每個執(zhí)行的應用程序就是一個進程。程序,每個執(zhí)行的應用程序就是一個進程。 51.1 進程和線程進程和線程(續(xù)續(xù))u 并行性的主要特點并行性的主要特點:并發(fā)處理并發(fā)處理在一個單處理器系統(tǒng)中可以通過分時處在一個單處理器系統(tǒng)中可以通過分時處理來獲得并發(fā),系統(tǒng)為每個線程分配一個理來獲得并發(fā),系統(tǒng)為每個線程分配一個cpu時間片,每個線程只有在分配的時間時間片,每個線程只有在分配的時間片內(nèi)才擁有對片內(nèi)
4、才擁有對cpu的控制權(quán),其它時間都的控制權(quán),其它時間都在等待。在等待。 61.1.1 process類類u process類位于類位于system.diagnostics名稱空間名稱空間下,它專門用于完成系統(tǒng)進程的管理任務。下,它專門用于完成系統(tǒng)進程的管理任務。 可以在本地計算機上啟動和停止進程,也可以在本地計算機上啟動和停止進程,也可以向進程查詢特定類型的信息。在遠程計算可以向進程查詢特定類型的信息。在遠程計算機上,無法啟動和停止進程,但可以查詢進程機上,無法啟動和停止進程,但可以查詢進程的相關(guān)信息。在對進程進行操作時,首先要創(chuàng)的相關(guān)信息。在對進程進行操作時,首先要創(chuàng)建建process類的實
5、例,其次還需要設置其對象成類的實例,其次還需要設置其對象成員的員的startinfo屬性,最后調(diào)用它的屬性,最后調(diào)用它的start方法。方法。7例例.啟動、停止和觀察進程啟動、停止和觀察進程1. 新建一個名為新建一個名為processexample的的windows應用程序。應用程序。2. 從工具箱中將從工具箱中將process組件拖放到設計窗體。組件拖放到設計窗體。3. 添加名稱空間添加名稱空間 :using system.diagnostics;using system.threading;4. 添加添加“啟動記事本啟動記事本”、“停止記事本停止記事本”和和“觀察所有進程觀察所有進程”三個
6、按鈕,并添加三個按鈕,并添加click事件代碼:事件代碼: private void buttonstart_click(object sender, eventargs e) process1.startinfo.filename = notepad.exe; /啟動啟動notepad.exe進程進程. process1.start();8private void buttonstop_click(object sender, eventargs e) /創(chuàng)建新的創(chuàng)建新的process組件的數(shù)組組件的數(shù)組,并將它們與指定的進程名稱并將它們與指定的進程名稱(notepad)的所有進程資源相關(guān)聯(lián)
7、)的所有進程資源相關(guān)聯(lián). process myprocesses; myprocesses = process.getprocessesbyname(notepad); foreach (process instance in myprocesses) /設置終止當前線程前等待設置終止當前線程前等待1000毫秒毫秒 instance.waitforexit(1000); instance.closemainwindow(); private void buttonview_click(object sender, eventargs e) listbox1.items.clear(); /創(chuàng)建
8、創(chuàng)建process類型的數(shù)組類型的數(shù)組,并將它們與系統(tǒng)內(nèi)所有進程相關(guān)聯(lián)并將它們與系統(tǒng)內(nèi)所有進程相關(guān)聯(lián) 9 process processes; processes = process.getprocesses(); foreach (process p in processes) /由于訪問由于訪問idle的的starttime會出現(xiàn)異常,所以將其排會出現(xiàn)異常,所以將其排除在外除在外 if (p.processname != idle) /將每個進程名和進程開始時間加入將每個進程名和進程開始時間加入listbox1中中 this.listbox1.items.add( string.forma
9、t(0,-301:h:m:s, p.processname, p.starttime); 101.1.2 thread類類 在在system.threading名稱空間下,名稱空間下, thread類是用于創(chuàng)建和控制線程的類是用于創(chuàng)建和控制線程的,對線程對線程的常用操作有:啟動線程、終止線程、合的常用操作有:啟動線程、終止線程、合并線程和讓線程休眠等。并線程和讓線程休眠等。11u啟動線程啟動線程 在使用線程前,首先要創(chuàng)建一個線程。其一般形在使用線程前,首先要創(chuàng)建一個線程。其一般形式為:式為:thread t=new thread(enterpoint); 其中其中enterpoint為線程的入
10、口,即線程開始執(zhí)行為線程的入口,即線程開始執(zhí)行的方法。在托管代碼中,是通過委托處理線程執(zhí)的方法。在托管代碼中,是通過委托處理線程執(zhí)行的代碼的。行的代碼的。例:例: thread t=new thread(new threadstart(methodname);創(chuàng)建線程實例后,就可以調(diào)用創(chuàng)建線程實例后,就可以調(diào)用start方法啟動線程了。方法啟動線程了。121.1.2 thread類類(續(xù)續(xù))u終止線程終止線程 線程啟動后,當不需要某個線程繼續(xù)執(zhí)行的時候,就需線程啟動后,當不需要某個線程繼續(xù)執(zhí)行的時候,就需要終止該線程。終止線程調(diào)用要終止該線程。終止線程調(diào)用thread類的類的abort方法。方
11、法。 例如例如:t.abort(); abort方法沒有參數(shù)。當調(diào)用方法沒有參數(shù)。當調(diào)用abort方法時,方法時,clr可能可能不會立即終止線程。不會立即終止線程。 主線程調(diào)用子線程的主線程調(diào)用子線程的abort方法后,結(jié)束子線程會占用方法后,結(jié)束子線程會占用大量大量cpu的時間,表面上看就像死機。為解決這個問題,可的時間,表面上看就像死機。為解決這個問題,可以在主線程中調(diào)用子線程對象的以在主線程中調(diào)用子線程對象的join方法,并在方法,并在join方法中方法中指定主線程等待子線程結(jié)束的等待時間。指定主線程等待子線程結(jié)束的等待時間。 131.1.2 thread類類(續(xù)續(xù))u合并線程合并線程
12、join方法用于把兩個并行執(zhí)行的線程合并為一個單個方法用于把兩個并行執(zhí)行的線程合并為一個單個的的線程。如果一個線程線程。如果一個線程t1在執(zhí)行的過程中需要等待另一個線在執(zhí)行的過程中需要等待另一個線程程t2結(jié)束后才繼續(xù)執(zhí)行,可以在結(jié)束后才繼續(xù)執(zhí)行,可以在t1中調(diào)用中調(diào)用t2的的join()方法。方法。 如:如:t2.join(); 這樣這樣t1在執(zhí)行到在執(zhí)行到t2.join()語句后就會處于組塞狀態(tài),直語句后就會處于組塞狀態(tài),直到到t2結(jié)束后才會繼續(xù)執(zhí)行。為了解決假如結(jié)束后才會繼續(xù)執(zhí)行。為了解決假如t2一直不結(jié)束的問一直不結(jié)束的問題題,可以在調(diào)用可以在調(diào)用t2的的join方法的時候指定一個等待時
13、間。方法的時候指定一個等待時間。 如如: t2.join(100); join方法通常和方法通常和abort一起使用。一起使用。 141.1.2 thread類類(續(xù)續(xù))u讓線程休眠讓線程休眠 在多線程應用程序中,有時候并不希望某一個線程在多線程應用程序中,有時候并不希望某一個線程繼續(xù)執(zhí)行,而是希望該線程停止一段時間,等待其它線繼續(xù)執(zhí)行,而是希望該線程停止一段時間,等待其它線程執(zhí)行之后再接著執(zhí)行。這時可以調(diào)用程執(zhí)行之后再接著執(zhí)行。這時可以調(diào)用thread類的類的sleep方法,即讓線程休眠。方法,即讓線程休眠。例如例如:thread.sleep(1000);這條語句的功能是讓當前線程休眠這條語
14、句的功能是讓當前線程休眠1000毫秒。毫秒。 注意注意,調(diào)用,調(diào)用sleep方法的是類本身,而不是類的實方法的是類本身,而不是類的實例。休眠的是該語句所在的線程,而不是其他線程。例。休眠的是該語句所在的線程,而不是其他線程。151.1.2 thread類類(續(xù)續(xù))u線程優(yōu)先級線程優(yōu)先級 在在c#應用程序中,可以對線程設定五個不同的優(yōu)先應用程序中,可以對線程設定五個不同的優(yōu)先級,由高到低分別是級,由高到低分別是highest、abovenormal、normal、belownormal和和lowest。在創(chuàng)建線程時如果不指定其優(yōu)先級,。在創(chuàng)建線程時如果不指定其優(yōu)先級,則系統(tǒng)默認為則系統(tǒng)默認為no
15、rmal。若想讓一些重要的線程優(yōu)先執(zhí)行,可以使用下面的方若想讓一些重要的線程優(yōu)先執(zhí)行,可以使用下面的方法為其賦予較高的優(yōu)先級:法為其賦予較高的優(yōu)先級:thread t=new thread(new threadstart(enterpoint);t.priority=threadpriority.abovenormal; 設置線程的優(yōu)先級可改變線程的執(zhí)行順序,所設置的設置線程的優(yōu)先級可改變線程的執(zhí)行順序,所設置的優(yōu)先級僅適用于這些線程所屬的進程。當把某線程的優(yōu)先優(yōu)先級僅適用于這些線程所屬的進程。當把某線程的優(yōu)先級設置為級設置為highest時,系統(tǒng)正在運行的其它線程都會止。時,系統(tǒng)正在運行的其
16、它線程都會止。 161.1.2 thread類類(續(xù)續(xù))u線程池線程池 線程池是一種多線程處理形式,線程池為線程生命周線程池是一種多線程處理形式,線程池為線程生命周期的開銷問題和資源不足問題提供了很好的解決方案。通期的開銷問題和資源不足問題提供了很好的解決方案。通過對多個任務重用線程,線程創(chuàng)建的開銷被分攤到了多個過對多個任務重用線程,線程創(chuàng)建的開銷被分攤到了多個任務上。任務上。線程池適用于需要多個線程而實際執(zhí)行時間又不多的線程池適用于需要多個線程而實際執(zhí)行時間又不多的場合場合 。但是如果線程要求運行的時間比較長的話,那么此。但是如果線程要求運行的時間比較長的話,那么此時線程的運行時間比線程的創(chuàng)
17、建時間要長得多,僅靠減少時線程的運行時間比線程的創(chuàng)建時間要長得多,僅靠減少線程的創(chuàng)建時間對系統(tǒng)效率的提高就不是那么明顯了,此線程的創(chuàng)建時間對系統(tǒng)效率的提高就不是那么明顯了,此時就不適合使用線程池技術(shù)時就不適合使用線程池技術(shù) 171.1.2 thread類類(續(xù)續(xù))u同步同步 同步指在某一時刻只有一個線程可以訪問變量或者對同步指在某一時刻只有一個線程可以訪問變量或者對象。象。 線程線程t1對對variable1操作時,為了避免其他線程也對其進操作時,為了避免其他線程也對其進行操作,可以使用行操作,可以使用c#提供的提供的lock語句將語句將variable1鎖定。鎖定。實現(xiàn)代碼為:實現(xiàn)代碼為:l
18、ock (variable1); variable1+=1; 注意:不要將被同步的對象聲明為注意:不要將被同步的對象聲明為public。18例例.在程序中使用線程在程序中使用線程1. 新建一個名為新建一個名為threadexample的的windows應用程序應用程序 。2.向設計窗體拖放一個向設計窗體拖放一個timer組件。組件。3.名稱空間:名稱空間:using system.threading; 4.字段聲明:字段聲明: stringbuilder sb = new stringbuilder();thread thread1;thread thread2;5. 代碼:代碼:privat
19、e void appendstring(string s) lock (sb) 19 str.append(s); public void method1() while(true) thread.sleep(100); /線程休眠線程休眠100毫秒毫秒 appendstring(a); public void method2() while(true)20 thread.sleep(100); /線程休眠線程休眠100毫秒毫秒 appendstring(b); 6. 啟動線程和終止線程按鈕的啟動線程和終止線程按鈕的click事件中添加代事件中添加代碼:碼: private void butt
20、onstart_click(object sender, eventargs e) sb.remove(0, sb.length); timer1.enabled = true; thread1 = new thread(new threadstart(method1); thread2 = new thread(new threadstart(method2); thread1.start();21 thread2.start();private void buttonabort_click(object sender, eventargs e) thread1.abort(); threa
21、d1.join(10); thread2.abort(); thread2.join(10);7. timer1的的tick事件代碼:事件代碼: private void timer1_tick(object sender, eventargs e) if (thread1.isalive = true | thread2.isalive = true)22 richtextbox1.text = sb.tostring(); else timer1.enabled = false; 鍵編譯并執(zhí)行,單擊啟動線程后,等一會再單鍵編譯并執(zhí)行,單擊啟動線程后,等一會再單擊終止擊終止線程,查看運行結(jié)果
22、。線程,查看運行結(jié)果。 231.1.3 在一個線程中操作另一個線程的控件在一個線程中操作另一個線程的控件 u 默認情況下,為了防止引起死鎖等默認情況下,為了防止引起死鎖等不安全因素,不安全因素,c#不允許在一個線程中直不允許在一個線程中直接操作另一個線程中的控件。但是在接操作另一個線程中的控件。但是在windows應用程序中,為了在窗體上顯應用程序中,為了在窗體上顯示線程中處理的信息,我們可能需要經(jīng)示線程中處理的信息,我們可能需要經(jīng)常在一個線程中引用另一個線程中的窗常在一個線程中引用另一個線程中的窗體控件。比較常用的辦法是使用委托體控件。比較常用的辦法是使用委托(delegate)來完成這個工
23、作。)來完成這個工作。u 例例.一個線程操作另一個線程的控件的一個線程操作另一個線程的控件的方法方法 。241.2 ip地址與端口地址與端口u ip(internet protocol)是)是internet網(wǎng)網(wǎng)絡設備之間傳輸數(shù)據(jù)的一種協(xié)議。本節(jié)絡設備之間傳輸數(shù)據(jù)的一種協(xié)議。本節(jié)所講的端口雖邏輯意義上的端口,是指所講的端口雖邏輯意義上的端口,是指tcp/ip協(xié)議中的端口。協(xié)議中的端口。這一節(jié)我們將對這一節(jié)我們將對ipaddress、iphostentry、ipendpoint等等system.net命名空間中的幾命名空間中的幾個類進行簡單的介紹。個類進行簡單的介紹。251.2.1 tcp/ip
24、網(wǎng)絡協(xié)議網(wǎng)絡協(xié)議u 網(wǎng)絡協(xié)議網(wǎng)絡協(xié)議utcp/ipuip地址地址261.2.2 ipaddress類與類與dns類類 ipaddress類提供了對類提供了對ip地址的轉(zhuǎn)換、處理等功能。其地址的轉(zhuǎn)換、處理等功能。其parse方法可將方法可將ip地址字符串轉(zhuǎn)換為地址字符串轉(zhuǎn)換為ipaddress實例。如:實例。如:ipaddress ip = ipaddress.parse(“”); ipaddress類提供了類提供了7個只讀字段個只讀字段:uany 表示本地系統(tǒng)可用的任何表示本地系統(tǒng)可用的任何ip地址地址ubroadcast 表示本地網(wǎng)絡的表示本地網(wǎng)絡的ip廣播地址廣播地址
25、uipv6any socket.bind方法用此字段指出本地系統(tǒng)可用方法用此字段指出本地系統(tǒng)可用的的ip地址地址uipv6loopback 表示系統(tǒng)的回送地址表示系統(tǒng)的回送地址uipv6none 表示系統(tǒng)上沒有可用的網(wǎng)絡接口表示系統(tǒng)上沒有可用的網(wǎng)絡接口uloopback 表示系統(tǒng)的回送地址表示系統(tǒng)的回送地址unone 表示系統(tǒng)上沒有可用的網(wǎng)絡接口表示系統(tǒng)上沒有可用的網(wǎng)絡接口 271.2.2 ipaddress類與類與dns類類(續(xù)續(xù)) dns類提供了一系列靜態(tài)的方法,用于獲取提供類提供了一系列靜態(tài)的方法,用于獲取提供本地本地或遠程域名等功能或遠程域名等功能,常用方法有:常用方法有: 1) ge
26、thostaddresses方法方法 獲取指定主機的獲取指定主機的ip地址,返回一個地址,返回一個ipaddress類型的數(shù)組。類型的數(shù)組。 函數(shù)原形為:函數(shù)原形為:public static ipaddress gethostaddresses(string hostnameoraddress);例如:例如:ipaddress ip=dns.gethostaddresses();listbox1.items.addrange(ip);28 2) gethostname方法方法 獲取本機主機名。例如:獲取本機主機名。例如:string hostname = dns.gethostname();
27、291.2.3 iphostentry類類 iphostentry類的實例對象中包含了類的實例對象中包含了internet主機的相主機的相關(guān)信息。關(guān)信息。 常用屬性有:常用屬性有:addresslist屬性和屬性和hostname屬性。屬性。 addresslist屬性作用屬性作用:獲取或設置與主機關(guān)聯(lián)的獲取或設置與主機關(guān)聯(lián)的ip地址地址列表,是一個列表,是一個ipaddress類型的數(shù)組,包含了指定主機的所類型的數(shù)組,包含了指定主機的所有有ip地址;地址;hostname屬性則包含了服務器的主機名。屬性則包含了服務器的主機名。 在在dns類中,有一個專門獲取類中,有一個專門獲取iphoste
28、ntry對象的方對象的方法,通過法,通過iphostentry對象,可以獲取本地或遠程主機的相對象,可以獲取本地或遠程主機的相關(guān)關(guān)ip地址。地址。例如:例如:301.2.3 iphostentry類類(續(xù)續(xù))listbox1.items.add(搜狐新聞所用的服務器搜狐新聞所用的服務器ip地址有:地址有:);ipaddress ip = dns.gethostentry().addresslist;listbox1.items.addrange(ip);listbox1.items.add(本機本機ip地址為:地址為:);ip = dns.gethostentry(dns.gethostnam
29、e().addresslist;listbox1.items.addrange(ip);311.2.4 ipendpoint類類 在在c#中,中,ipendpoint類包含了應用程序類包含了應用程序連接到主機上的服務所需的連接到主機上的服務所需的ip地址和端口信地址和端口信息。息。 ipendpoint類常用的構(gòu)造函數(shù)為:類常用的構(gòu)造函數(shù)為:public ipendpoint(ipaddress, int); 其中第一個參數(shù)指定其中第一個參數(shù)指定ip地址,第二個參地址,第二個參數(shù)指定端口號。數(shù)指定端口號。例例 :ipaddress類、類、dns類、類、iphostentry類和類和ipendp
30、oint類的使用方法。類的使用方法。 321.3 套接字套接字 套接字是支持套接字是支持tcp/ip協(xié)議的網(wǎng)絡通信的基協(xié)議的網(wǎng)絡通信的基本操作單元。可以將套接字看作不同主機間的本操作單元??梢詫⑻捉幼挚醋鞑煌鳈C間的進程進行雙向通信的端點,它構(gòu)成了單個主機進程進行雙向通信的端點,它構(gòu)成了單個主機內(nèi)及整個網(wǎng)絡間的編程界面。套接字通常和同內(nèi)及整個網(wǎng)絡間的編程界面。套接字通常和同一個域中的套接字交換數(shù)據(jù)一個域中的套接字交換數(shù)據(jù),各種進程使用各種進程使用 這個相同的域互相之間用這個相同的域互相之間用internet協(xié)議進行協(xié)議進行通信。通信。 套接字有兩種不同的類型:流套接字和數(shù)套接字有兩種不同的類型
31、:流套接字和數(shù)據(jù)報套接字。據(jù)報套接字。 要通過互聯(lián)網(wǎng)進行通信,至少需要一對套要通過互聯(lián)網(wǎng)進行通信,至少需要一對套接字,其中一個運行于客戶端,稱之為接字,其中一個運行于客戶端,稱之為clientsocket,另一個運行于服務器端,稱之為,另一個運行于服務器端,稱之為serversocket。331.3 套接字套接字(續(xù)續(xù)) 根據(jù)連接啟動的方式以及本地套接字要連接根據(jù)連接啟動的方式以及本地套接字要連接的目標,套接字之間的連接過程可以分為三個步的目標,套接字之間的連接過程可以分為三個步驟:服務器監(jiān)聽,客戶端請求,連接確認。驟:服務器監(jiān)聽,客戶端請求,連接確認。u服務器監(jiān)聽服務器監(jiān)聽:指服務器端套接字
32、并不定位具體的客戶指服務器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實時監(jiān)控網(wǎng)絡狀端套接字,而是處于等待連接的狀態(tài),實時監(jiān)控網(wǎng)絡狀態(tài)。態(tài)。u客戶端請求客戶端請求:指由客戶端的套接字提出連接請求,要指由客戶端的套接字提出連接請求,要連接的目標是服務器端的套接字。連接的目標是服務器端的套接字。u連接確認連接確認:指當服務器端套接字監(jiān)聽到或接收到客戶指當服務器端套接字監(jiān)聽到或接收到客戶端套接字的連接請求時,它就響應客戶端套接字的請求,端套接字的連接請求時,它就響應客戶端套接字的請求,建立一個新的線程,把服務器端套接字的信息發(fā)給客戶建立一個新的線程,把服務器端套接字的信息發(fā)給客戶端,
33、一旦客戶端確認了此信息,連接即可建立。端,一旦客戶端確認了此信息,連接即可建立。341.3 套接字套接字(續(xù)續(xù))套接字處理數(shù)據(jù)兩種基本模式:同步套接字和套接字處理數(shù)據(jù)兩種基本模式:同步套接字和異步套接字。異步套接字。u同步套接字同步套接字 其特點是在通過其特點是在通過socket進行連接、接收、發(fā)送進行連接、接收、發(fā)送操作時,客戶機或服務器在接收到對方響應前會操作時,客戶機或服務器在接收到對方響應前會處于阻塞狀態(tài)。它適用于數(shù)據(jù)處理不太多的場合。處于阻塞狀態(tài)。它適用于數(shù)據(jù)處理不太多的場合。u異步套接字異步套接字 在通過在通過socket進行連接、接收、發(fā)送操作時,進行連接、接收、發(fā)送操作時,客戶
34、機或服務器不會處于阻塞方式,而是利用客戶機或服務器不會處于阻塞方式,而是利用callback機制進行連接、接收和發(fā)送處理,這樣就機制進行連接、接收和發(fā)送處理,這樣就可以在調(diào)用發(fā)送或接收的方法后直接返回,并繼可以在調(diào)用發(fā)送或接收的方法后直接返回,并繼續(xù)執(zhí)行下面的程序。續(xù)執(zhí)行下面的程序。 351.3.2 面向連接的套接字面向連接的套接字 ip連接領(lǐng)域有兩種通信類型:連接領(lǐng)域有兩種通信類型:u 面向連接的(面向連接的(connection-oriented) 在面向連接的套接字中,使用在面向連接的套接字中,使用tcp協(xié)議來建立協(xié)議來建立兩個兩個ip地址端點之間的會話。一旦建立了這種連接,地址端點之間
35、的會話。一旦建立了這種連接,就可以在設備之間可靠的傳輸數(shù)據(jù)。就可以在設備之間可靠的傳輸數(shù)據(jù)。u 無連接的(無連接的(connectionless) 為了建立面向連接的套接字,服務器和客戶端為了建立面向連接的套接字,服務器和客戶端必須分別進行編程。必須分別進行編程。 對于服務器端程序,建立的對于服務器端程序,建立的套接字必須綁定到用于套接字必須綁定到用于tcp通信的本地通信的本地ip地址和端地址和端口上。口上。361.3.2 面向連接的套接字面向連接的套接字(續(xù)續(xù)) bind方法用于完成綁定工作:方法用于完成綁定工作:bind(ipendpoint address) address為為ipend
36、point的實例,該實例包括一個本地的實例,該實例包括一個本地ip地址和一個端口號。在套接字綁定到本地之后,就用地址和一個端口號。在套接字綁定到本地之后,就用listen方法等待客戶機發(fā)出的連接嘗試:方法等待客戶機發(fā)出的連接嘗試:listen(int backlog) backlog參數(shù)指出系統(tǒng)等待用戶程序服務排隊的連接參數(shù)指出系統(tǒng)等待用戶程序服務排隊的連接數(shù),超過連接數(shù)的任何客戶都不能與服務器進行通信。數(shù),超過連接數(shù)的任何客戶都不能與服務器進行通信。 在在listen方法執(zhí)行之后,服務器已經(jīng)做好了接收任何方法執(zhí)行之后,服務器已經(jīng)做好了接收任何引進連接的準備,這是用引進連接的準備,這是用accept方法來完成的,當有新客方法來完成的,當有新客戶進行連接時,該方法就返回一個新的套接字描述符。戶進行連接時,該方法就返回一個新的套接字描述符。 371.3.3 無連接的套接字無連接的套接字 udp協(xié)議使用無連接的套接字,不需要在網(wǎng)絡設備之協(xié)議使用無連接的套接字,不需要在網(wǎng)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO 17715:2025 EN Flour from wheat (Triticum aestivum L.) - Amperometric method for starch damage measurement
- 2025-2030年中國智慧養(yǎng)老服務行業(yè)商業(yè)模式創(chuàng)新戰(zhàn)略制定與實施研究報告
- 2025-2030年中國汽車后市場行業(yè)開拓第二增長曲線戰(zhàn)略制定與實施研究報告
- 2025-2030年中國控制線纜組件行業(yè)資本規(guī)劃與股權(quán)融資戰(zhàn)略制定與實施研究報告
- 收看《反腐為人民》心得體會:弘揚清風正氣筑牢廉潔根基
- 年產(chǎn)xxx新型建材新型墻體材料項目可研報告模板
- 廣西河池市環(huán)江縣2021-2022學年五年級上學期英語期末試卷
- 商品加工知識培訓課件
- 學校消防安全知識培訓
- 債券價格的敏感性第五章
- 2023年長沙市中考數(shù)學真題試卷及答案
- 《電力設備消防典型準則》(DL5027-2022)
- 米吳科學漫畫奇妙萬象篇
- 河南省鄭州市金水區(qū)2022-2023學年三年級上學期期末數(shù)學試卷
- XXX酒店開辦費POB預算
- Z矩陣、Y矩陣、A矩陣、S矩陣、T矩陣定義、推導及轉(zhuǎn)換公式
- 中美歐規(guī)范樁基承載力計算設計對比
- 外科洗手操作考核評分表
- 復旦大學外國留學生入學申請表
- 長安汽車發(fā)動機水溫高故障案例分析處置
- 瞬時單位線法計算洪水
評論
0/150
提交評論