第1章 Java網(wǎng)絡(luò)程序設(shè)計(jì)基礎(chǔ)
,單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級(jí),第三級(jí),第四級(jí),第五級(jí),Software Engineering,School of electronic and Information Engineering,,,FOSHAN University,2013,網(wǎng)絡(luò)程序設(shè)計(jì),佛山科學(xué)技術(shù)學(xué)院,電子與信息工程學(xué)院,Network Programming,Network Programming,Software Engineering,教材及參考書(shū),教材,王一飛,等:,Java,網(wǎng)絡(luò)程序設(shè)計(jì),2010,參考書(shū),Java,網(wǎng)絡(luò)程序設(shè)計(jì),(,附光盤(pán)原版引進(jìn)中國(guó)臺(tái)灣版權(quán),),Network Programming,Software Engineering,考試成績(jī),平時(shí)成績(jī):,30%,(,考勤,、,作業(yè)),期末考試:,70%,Network Programming,Software Engineering,授課教師,授課教師:胡春萍,聯(lián)系方式:,QQ:,15761480,電話:,13690388849,Network Programming,Software Engineering,網(wǎng)絡(luò)程序設(shè)計(jì),課程教學(xué)與實(shí)踐的目標(biāo),介紹了網(wǎng)絡(luò)編程的基本概念、基本知識(shí)和編程技術(shù),主要內(nèi)容包括,TCP/IP,網(wǎng)絡(luò)基礎(chǔ)知識(shí)、基于,Socket,基礎(chǔ)、流式,Socket,編程、數(shù)據(jù)報(bào),socket,編程,多進(jìn)程、多線程網(wǎng)絡(luò)服務(wù)編寫(xiě),通過(guò)課程教學(xué),使學(xué)生掌握了解如何利用常用網(wǎng)絡(luò)協(xié)議進(jìn)行網(wǎng)絡(luò)程序設(shè)計(jì),以加深學(xué)生對(duì)網(wǎng)絡(luò)原理的理解,并提高學(xué)生的程序設(shè)計(jì)能力和網(wǎng)絡(luò)應(yīng)用能力。,Network Programming,課程主要內(nèi)容:,第,1,章,Java,網(wǎng)絡(luò)程序設(shè)計(jì)基礎(chǔ)第,2,章,Internet,尋址第,3,章,URL,通信第,4,章 套接字第,5,章 數(shù)據(jù)報(bào)套接字第,6,章 多線程第,7,章 非阻塞,Socket,通信第,8,章 對(duì)象序列化第,9,章 套接字安全第,10,章 實(shí)例,Network Programming,Software Engineering,第,1,章,Java,網(wǎng)絡(luò)程序設(shè)計(jì)基礎(chǔ),1.1,網(wǎng)絡(luò)基礎(chǔ)知識(shí),1.2,網(wǎng)絡(luò)程序設(shè)計(jì)基礎(chǔ),1.3 Java,與網(wǎng)絡(luò)通信,Network Programming,Software Engineering,1.1,網(wǎng)絡(luò)基礎(chǔ)知識(shí),計(jì)算機(jī)網(wǎng)絡(luò)概念,網(wǎng)絡(luò)中每臺(tái)機(jī)器稱為節(jié)點(diǎn)(,node,)。,網(wǎng)絡(luò)中的每個(gè)主機(jī)都有地址。,網(wǎng)絡(luò)中的主機(jī)之間通過(guò)網(wǎng)絡(luò)協(xié)議進(jìn)行交流。,網(wǎng)絡(luò)協(xié)議,網(wǎng)內(nèi)主機(jī)之間通信時(shí)必須遵守的規(guī)則和約定。,網(wǎng)絡(luò)協(xié)議是分層的,,不同層具有各自不同的協(xié)議。,網(wǎng)絡(luò)通信三要素,進(jìn)行通信的計(jì)算機(jī)的地址:,IP,地址,進(jìn)行通信的計(jì)算機(jī)的規(guī)則:,TCP,協(xié)議,UDP,協(xié)議等,通信應(yīng)用程序所在通信端口,Network Programming,Software Engineering,1.1.1 TCP/IP,參考模型與,OSI,比較,TCP/IP,參考模型,實(shí)際的工業(yè)標(biāo)準(zhǔn),OSI,比較:國(guó)際化標(biāo)準(zhǔn)模型,Network Programming,Software Engineering,1.1.2 TCP/IP,參考模型及協(xié)議,Network Programming,TCP,UDP,用戶進(jìn)程,用戶,進(jìn)程,用戶,進(jìn)程,用戶,進(jìn)程,ICMP,IP,IGMP,ARP,硬件接口,RARP,媒介,傳輸層,應(yīng)用層,網(wǎng)絡(luò)層,鏈路層,Software Engineering,1.1.2 TCP/IP,參考模型及協(xié)議,Network Programming,網(wǎng)絡(luò)接口層,為網(wǎng)絡(luò)互聯(lián)層提供訪問(wèn)接口,使其能夠傳遞,IP,數(shù)據(jù)包。,網(wǎng)際層(,IP,協(xié)議),是整個(gè)參考模型的核心。功能是把,IP,數(shù)據(jù)包發(fā)送到目標(biāo)主機(jī)。,具備連接異構(gòu)網(wǎng)的功能。采用,IP,(,Internet Protocol,)協(xié)議,規(guī)定數(shù)據(jù)包的格式,及為數(shù)據(jù)包尋找路由的流程。,傳輸層(,TCP,和,UDP,協(xié)議),功能是使源主機(jī)和目標(biāo)主機(jī)上的進(jìn)程可以進(jìn)行會(huì)話。,TCP,(,Transmission Control Protocol,)協(xié)議:傳輸控制協(xié)議,是一種面向連接的,可靠的協(xié)議。應(yīng)用層的大多數(shù)協(xié)議都建立在,TCP,協(xié)議的基礎(chǔ)上。,UDP,(,User Datagram Protocol,)協(xié)議:用戶數(shù)據(jù)報(bào)協(xié)議,是一種無(wú)連接的,不可靠的協(xié)議。主要適用于不需要對(duì)報(bào)文進(jìn)行排序和流量控制的場(chǎng)合。,Software Engineering,1.1.2 TCP/IP,參考模型及協(xié)議,應(yīng)用層(基于,TCP,協(xié)議的應(yīng)用層協(xié)議),HTTP,(,Hyper Text Transfer Protocol,)協(xié)議:超文本傳輸協(xié)議,FTP,(,Files Transfer Protocol,)協(xié)議:文件傳輸協(xié)議,POP3,(,Post Office Protocol-3,)協(xié)議:郵局協(xié)議,SMTP,(,Simple Mail Transfer Protocol,)協(xié)議,IMAP4,(,Internet Message Access Protocol-4,)協(xié)議:消息訪問(wèn)協(xié)議,允許用戶訪問(wèn)和操縱遠(yuǎn)程程序器上的郵件和郵件文件夾。,應(yīng)用層(基于,UDP,協(xié)議的應(yīng)用層協(xié)議),SNMP,(,Simple Network Management Protocol,)協(xié)議:簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議,為管理本地和遠(yuǎn)程的網(wǎng)絡(luò)設(shè)備提供標(biāo)準(zhǔn)化途徑。,DNS,(,Domain Name System,)協(xié)議:域名系統(tǒng)協(xié)議,把主機(jī)的域名轉(zhuǎn)換成相應(yīng)的,IP,地址。,Network Programming,Software Engineering,1.1.3 TCP,、,UDP,協(xié)議,Network Programming,傳輸控制協(xié)議,TCP,傳輸控制協(xié)議,(,Transmission Control Protocol,TCP,)是一種面向連接的、可靠的、基于字節(jié)流的運(yùn)輸層通信協(xié)議。傳輸控制協(xié)議,不管實(shí)際消息邊界是否存在。,TCP,提供全雙工服務(wù),即數(shù)據(jù)可在同一時(shí)間雙向流動(dòng)。在兩個(gè)應(yīng)用程序彼此連接之后,它們都可以發(fā)送和接收數(shù)據(jù)。,TCP,連接可以從應(yīng)用程序,A,向,B,發(fā)送數(shù)據(jù),而在同一時(shí)間還可以從,B,向,A,發(fā)送數(shù)據(jù)。,Software Engineering,1.1.3 TCP,、,UDP,協(xié)議,Network Programming,用戶數(shù)據(jù)報(bào)協(xié)議,UDP,用戶數(shù)據(jù)報(bào)協(xié)議,(User Datagram,Protoco,UDP),是一個(gè)簡(jiǎn)單的面向數(shù)據(jù)報(bào)的,傳輸層,(transport layer),協(xié)議,,協(xié)議以消息為單位在網(wǎng)上傳送數(shù)據(jù),在發(fā)送端,消息一條一條地發(fā)送,在接收端,也只能一條一條地接收,每一條消息是獨(dú)立的,消息之間存在著邊界。,UDP,在傳送數(shù)據(jù)之前不需要先建立連接。,對(duì)方的傳輸層在收到,UDP,報(bào)文后,不需要給出任何確認(rèn)。雖然,UDP,不提供可靠交付,但在某些情況下,UDP,是一種最有效的工作方式。,Software Engineering,1.1.4,IP,地址與域名,IP,地址就是標(biāo)識(shí)計(jì)算機(jī)或網(wǎng)絡(luò)設(shè)備的網(wǎng)絡(luò)地址。在計(jì)算機(jī)內(nèi)部它由四個(gè)字節(jié)的,32,位的二進(jìn)制數(shù)組成,為了方便,在外部使用時(shí)采用以小數(shù)點(diǎn)“,.”,分隔的四組十進(jìn)制數(shù)表示。比如,202.196.176.16,等,所以,IP,地址的每一組數(shù)字都不能超過(guò),255,。每一臺(tái)計(jì)算機(jī)的,IP,地址是唯一的。,(ipv4 ,ipv46),由于,IP,地址含義不明確且不太方便記憶,在實(shí)際應(yīng)用中大多使用主機(jī)名(有的也稱域名),如,http:/,就比較明確,一看該網(wǎng)址就知道它是中央電視臺(tái)的網(wǎng)址。主機(jī)名是和,IP,地址是一一對(duì)應(yīng)的,通過(guò),DNS,(域名服務(wù)器)解析可以由主機(jī)名獲得計(jì)算機(jī)或網(wǎng)絡(luò)設(shè)備的,IP,地址,因?yàn)閷?duì)計(jì)算機(jī)或網(wǎng)絡(luò)設(shè)備而言只有,IP,地址才是有效的標(biāo)識(shí)符。,Software Engineering,1.1.5,端口號(hào),一臺(tái)機(jī)器只通過(guò)一條鏈路連接到網(wǎng)絡(luò)上,但一臺(tái)機(jī)器中往往有很多應(yīng)用程序需要進(jìn)行網(wǎng)絡(luò)通信,如何區(qū)分呢?這就要靠網(wǎng)絡(luò)端口號(hào)(,port),了。,端口號(hào)是一個(gè)標(biāo)記機(jī)器的邏輯通信信道的正整數(shù),端口號(hào)不是物理實(shí)體。端口是一種抽象的軟件結(jié)構(gòu),(,包括一些數(shù)據(jù)結(jié)構(gòu)和,I/O,緩沖區(qū),),。應(yīng)用程序通過(guò)系統(tǒng)調(diào)用與某端口建立連接后,傳輸層傳給該端口的數(shù)據(jù)都被相應(yīng)的進(jìn)程(應(yīng)用程序)所接收,相應(yīng)進(jìn)程發(fā)給傳輸層的數(shù)據(jù)都通過(guò)該端口輸出。,Software Engineering,1.1.5,端口號(hào),端口用一個(gè)整數(shù)型標(biāo)識(shí)符來(lái)表示,即端口號(hào)。端口號(hào)跟,協(xié)議相關(guān),,,TCP/IP,傳輸層的兩個(gè)協(xié)議,TCP,和,UDP,是完全獨(dú)立的兩個(gè)軟件模塊,因此各自的端口號(hào)也相互獨(dú)立。也就是說(shuō),基于,TCP,和,UDP,協(xié)議的不同的網(wǎng)絡(luò)應(yīng)用程序,它們可以擁有相同的端口號(hào)。端口使用一個(gè),16,位的數(shù)字來(lái)表示,它的范圍是,(0,65535),1024,以下的端口號(hào)保留給預(yù)定義的服務(wù)。例如,:http,使用,80,端口。我們?cè)诰帉?xiě)網(wǎng)絡(luò)應(yīng)用程序時(shí),要為程序指定,1024,以上的端口號(hào)。,Software Engineering,表,1.1,一些典型的應(yīng)用層協(xié)議分配到的保留端口,TCP,的保留端口,UDP,的保留端口,FTP,21,DNS,53,HTTP,80,TFTP,69,SMTP,25,SNMP,161,POP3,110,其余的端口號(hào),,1024-65535,,稱為自由端口號(hào),采用本地分配,又稱為動(dòng)態(tài)分配的方法。,Software Engineering,總之,,TCP,或,UDP,端口的分配規(guī)則是:,端口,0,:不使用,或者作為特殊的使用;,端口,1-255,:保留給特定的服務(wù),,TCP,和,UDP,均規(guī)定,小于,256,的端口號(hào)才能分配給網(wǎng)上著名的服務(wù);,端口,256-1023,:保留給其他的服務(wù),如路由;,端口,1024-4999,:可以用作任意客戶的端口;,端口,5000-65535,:可以用作用戶的服務(wù)器端口。,Software Engineering,1.2,網(wǎng)絡(luò)程序設(shè)計(jì)基礎(chǔ),1.2.1,客戶機(jī),/,服務(wù)器模型模型,Internet,和大多數(shù)現(xiàn)代網(wǎng)絡(luò)應(yīng)用程序都采用客戶,/,服務(wù)器模型,這種分布式架構(gòu)是幾乎所有用戶同,Internet,交互的基礎(chǔ)。,客戶端向服務(wù)器發(fā)出請(qǐng)求,服務(wù)器通過(guò)執(zhí)行操作(如將信息發(fā)回客戶端)做出響應(yīng),這就是客戶,/,服務(wù)器模型的重要特征。,客戶,-,服務(wù)器模式描述的是進(jìn)程之間的服務(wù)和被服務(wù)的關(guān)系。在這種模式下,大多數(shù)網(wǎng)絡(luò)應(yīng)用系統(tǒng)由兩部分組成:客戶(,Client,)和服務(wù)器(,Server,)。客戶是主叫方,服務(wù)器是被叫方。,客戶與服務(wù)器的通信關(guān)系一旦建立,通信就可以是雙向的,客戶和服務(wù)器都可以發(fā)送和接收信息。,Software Engineering,1.2.1,客戶機(jī),/,服務(wù)器模型模型,1,、,客戶,程序與客戶機(jī),2,、,服務(wù)器,程序與服務(wù)器。,Software Engineering,1.3.2,套接字(,SOCKET,),套接字應(yīng)用程序編程接口是網(wǎng)絡(luò)應(yīng)用程序通過(guò)網(wǎng)絡(luò)協(xié)議棧進(jìn)行通信時(shí)所使用的接口,即應(yīng)用程序與協(xié)議棧軟件之間的接口,簡(jiǎn)稱套接字編程接口,(Socket API),。,它定義了應(yīng)用程序與協(xié)議棧軟件進(jìn)行交互時(shí)可以使用的一組操作,決定了應(yīng)用程序使用協(xié)議棧的方式、應(yīng)用程序所能實(shí)現(xiàn)的功能、以及開(kāi)發(fā)具有這些功能的程序的難度。,Software Engineering,應(yīng)用進(jìn)程、套接口、網(wǎng)絡(luò)協(xié)議棧及操作系統(tǒng)的關(guān)系,Software Engineering,1.3 Java,語(yǔ)言與網(wǎng)絡(luò)通信,Java,語(yǔ)言是,Internet,上最,熱門(mén)的編程語(yǔ)言,,,java,語(yǔ)言是,Internet,上的世界語(yǔ),,在,Java,語(yǔ)言中,與,網(wǎng)絡(luò)編程有關(guān)的基本,API,位于,包中,,提供網(wǎng)絡(luò)功能的類和接口主要分為三種:,套接字,Socket,:,直接在程序中實(shí)現(xiàn)網(wǎng)絡(luò)通訊,WEB,的編程接口,。,URL,(,Uniform Resource Locators,,統(tǒng)一資源