java程序設(shè)計(jì)任務(wù)式教程 課件 8 網(wǎng)絡(luò)編程_第1頁(yè)
java程序設(shè)計(jì)任務(wù)式教程 課件 8 網(wǎng)絡(luò)編程_第2頁(yè)
java程序設(shè)計(jì)任務(wù)式教程 課件 8 網(wǎng)絡(luò)編程_第3頁(yè)
java程序設(shè)計(jì)任務(wù)式教程 課件 8 網(wǎng)絡(luò)編程_第4頁(yè)
java程序設(shè)計(jì)任務(wù)式教程 課件 8 網(wǎng)絡(luò)編程_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

JaVa程序設(shè)計(jì)任務(wù)式教程01任務(wù)8-1模擬查詢聊天應(yīng)用程序的IP地址及地理位置02任務(wù)8-2模擬簡(jiǎn)單的局域網(wǎng)聊天程序目錄CONTNETS單元八

網(wǎng)絡(luò)編程03任務(wù)8-3模擬簡(jiǎn)單的在線訂購(gòu)系統(tǒng)單元目標(biāo)能夠根據(jù)IP地址和端口號(hào),實(shí)現(xiàn)不同設(shè)備或進(jìn)程之間的通信和數(shù)據(jù)交換。能夠使用InetAddress類獲取和操作IP地址信息。能夠使用UDP協(xié)議實(shí)現(xiàn)簡(jiǎn)單的通信程序。能夠使用TCP協(xié)議實(shí)現(xiàn)多線程通信程序。培養(yǎng)學(xué)生對(duì)網(wǎng)絡(luò)通信協(xié)議的理解和掌握能力,理解網(wǎng)絡(luò)通信的基本原理和機(jī)制。培養(yǎng)學(xué)生分析和解決問(wèn)題的能力,能夠針對(duì)具體的網(wǎng)絡(luò)編程問(wèn)題,提出有效的解決方案。知識(shí)目標(biāo)能力目標(biāo)素養(yǎng)目標(biāo)學(xué)習(xí)目標(biāo)理解網(wǎng)絡(luò)通信協(xié)議的定義與三個(gè)要素。理解IP地址和端口號(hào)的定義。掌握InetAddress類的使用。掌握數(shù)據(jù)報(bào)通信的原理與實(shí)現(xiàn)。掌握套接字通信的原理與實(shí)現(xiàn)。01任務(wù)8-1模擬查詢聊天應(yīng)用程序的IP地址及地理位置網(wǎng)絡(luò)通信協(xié)議IP地址和端口號(hào)使用InetAddress類操作網(wǎng)絡(luò)地址任務(wù)8-1模擬查詢聊天應(yīng)用程序的IP地址及地理位置-網(wǎng)絡(luò)編程基礎(chǔ)網(wǎng)絡(luò)通信協(xié)議網(wǎng)絡(luò)通信協(xié)議是一種網(wǎng)絡(luò)通用語(yǔ)言,旨在為連接不同操作系統(tǒng)和不同硬件體系結(jié)構(gòu)的互聯(lián)網(wǎng)絡(luò)提供通信支持。它規(guī)定了網(wǎng)絡(luò)中各個(gè)設(shè)備之間傳輸數(shù)據(jù)時(shí)所必須遵守的規(guī)則和標(biāo)準(zhǔn),使得各種設(shè)備和系統(tǒng)能夠相互通信、交換信息。網(wǎng)絡(luò)通信協(xié)議主要由三個(gè)要素組成,分別是語(yǔ)義、語(yǔ)法和變換規(guī)則,其中語(yǔ)義用于決定雙方對(duì)話的類型,語(yǔ)法用于決定雙方對(duì)話的格式,變換規(guī)則用于決定通信雙方的應(yīng)答關(guān)系TCP/IP模型是互聯(lián)網(wǎng)協(xié)議的核心,它定義了數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸。這個(gè)模型包括四個(gè)層次:應(yīng)用層、傳輸層、網(wǎng)際層和網(wǎng)絡(luò)接口層IP地址和端口號(hào)網(wǎng)絡(luò)中的計(jì)算機(jī)互相通信,需要為每臺(tái)計(jì)算機(jī)指定一個(gè)標(biāo)識(shí)號(hào),通過(guò)這個(gè)標(biāo)識(shí)號(hào)來(lái)指定接收或發(fā)送數(shù)據(jù)的計(jì)算機(jī),在TCP/IP協(xié)議中,這個(gè)標(biāo)識(shí)號(hào)就是IP地址,它能唯一地標(biāo)識(shí)Internet上的計(jì)算機(jī)。IP地址(InternetProtocolAddress)是用于標(biāo)識(shí)互聯(lián)網(wǎng)上設(shè)備的唯一地址,這些設(shè)備可以是計(jì)算機(jī)、路由器、服務(wù)器等。IPv4是目前廣泛使用的IP地址版本,它使用32位二進(jìn)制數(shù)來(lái)表示,但為了方便人們閱讀和記憶,通常把它分成4個(gè)8位的二進(jìn)制數(shù),每8位之間用圓點(diǎn)隔開(kāi),每個(gè)8位整數(shù)可以轉(zhuǎn)換成一個(gè)0~255的十進(jìn)制整數(shù),例如,。IPv6是IPv4的繼任者,它使用128位二進(jìn)制數(shù)來(lái)表示地址,以應(yīng)對(duì)IPv4地址空間耗盡的問(wèn)題。當(dāng)一個(gè)程序需要發(fā)送數(shù)據(jù)時(shí),需要指定IP地址和端口號(hào),下面通過(guò)一張圖來(lái)描述使用IP地址與端口號(hào)進(jìn)行網(wǎng)絡(luò)通信任務(wù)8-1模擬查詢聊天應(yīng)用程序的IP地址及地理位置-網(wǎng)絡(luò)編程基礎(chǔ)使用InetAddress類操作網(wǎng)絡(luò)地址當(dāng)Java程序訪問(wèn)網(wǎng)絡(luò)地址時(shí),需要同時(shí)處理IP地址和相應(yīng)的主機(jī)名。這些操作的方法由.InetAddress類提供。InetAddress類沒(méi)有提供構(gòu)造方法,提供了5個(gè)靜態(tài)方法來(lái)獲取InetAddress對(duì)象,具體介紹如下。publicstaticInetAddress[]getByName(Stringhost):在給定主機(jī)名的情況下,根據(jù)系統(tǒng)上配置的名稱服務(wù)返回其IP地址所組成的數(shù)組,即InetAddress數(shù)組對(duì)象。publicstaticInetAddressgetByAddress(byte[]addr):根據(jù)給定的原始IP地址,獲取InetAddress對(duì)象。publicstaticInetAddressgetByAddress(Stringhost,byte[]addr):根據(jù)提供的主機(jī)名和IP地址創(chuàng)建InetAddress對(duì)象。publicstaticInetAddressgetByName(Stringhost):根據(jù)給定的主機(jī)名獲取InetAddress對(duì)象。publicstaticInetAddressgetLocalHost():返回本地IP地址對(duì)應(yīng)的InetAddress對(duì)象。除了以上5種靜態(tài)方法之外,InetAddress類還提供了其他常用方法,具體介紹如下。StringgetHostName():返回此IP地址的主機(jī)名。StringgetHostAddress():返回InetAddress實(shí)例對(duì)應(yīng)的IP地址字符串。byte[]getAddress():返回一個(gè)byte[]類型的數(shù)組,表示IP地址的原始字節(jié)。任務(wù)8-1模擬查詢聊天應(yīng)用程序的IP地址及地理位置-網(wǎng)絡(luò)編程基礎(chǔ)如例8-1所示,下面通過(guò)一個(gè)例子演示InetAddress類的常用方法的使用。首先在Eclipse中創(chuàng)建一個(gè)名為Chapter08的程序,然后在src文件夾中創(chuàng)建work包,在該包中創(chuàng)建ExampleInetAddress類,在該類中演示InetAddress類的常用方法的使用,具體代碼ExampleInetAddress.java任務(wù)8-1模擬查詢聊天應(yīng)用程序的IP地址及地理位置-網(wǎng)絡(luò)編程基礎(chǔ)1packagework;2import.InetAddress;3publicclassExampleInetAddress{4 publicstaticvoidmain(String[]args)throwsException{5 //返回本地IP地址對(duì)應(yīng)的InetAddress對(duì)象

6 InetAddresslocalHost=InetAddress.getLocalHost();7 System.out.println("本機(jī)的IP地址:"+localHost.getHostAddress());8 //根據(jù)主機(jī)名返回對(duì)應(yīng)的InetAddress對(duì)象

9 InetAddressip=InetAddress.getByName("");10 System.out.println("百度的IP地址:"+ip.getHostAddress());11 System.out.println("百度的主機(jī)名:"+ip.getHostName());12 }13}1.在Chapter08程序中創(chuàng)建com.example.task包,用于存放本單元中每個(gè)任務(wù)的代碼文件。2.調(diào)用getHostAddress()方法獲取當(dāng)前設(shè)備的IP地址。3.定義getLocationByIp()方法模擬調(diào)用外部服務(wù)查詢IP地址的地理位置(實(shí)際上會(huì)通過(guò)網(wǎng)絡(luò)請(qǐng)求外部API)。4.顯示查詢到的地理位置信息。代碼參考教材中的IPLocationQuery.java任務(wù)8-1模擬查詢聊天應(yīng)用程序的IP地址及地理位置-任務(wù)實(shí)現(xiàn)運(yùn)行上述代碼,模擬查詢IP地址及地理位置的運(yùn)行結(jié)果如圖任務(wù)8-1模擬查詢聊天應(yīng)用程序的IP地址及地理位置-任務(wù)實(shí)現(xiàn)02任務(wù)8-2模擬簡(jiǎn)單的局域網(wǎng)聊天程序數(shù)據(jù)報(bào)通信概述DatagramPacket類DatagramSocket類簡(jiǎn)單的UDP通信程序數(shù)據(jù)報(bào)通信概述數(shù)據(jù)報(bào)通信是計(jì)算機(jī)網(wǎng)絡(luò)中一種重要的通信方式,它通過(guò)將數(shù)據(jù)分割成固定大小的數(shù)據(jù)報(bào)并進(jìn)行獨(dú)立傳輸來(lái)實(shí)現(xiàn)信息的快速傳遞。常見(jiàn)的數(shù)據(jù)報(bào)通信協(xié)議是UDP(用戶數(shù)據(jù)報(bào)協(xié)議),數(shù)據(jù)報(bào)是UDP協(xié)議傳輸?shù)幕締挝?,它包含了要發(fā)送的數(shù)據(jù)以及數(shù)據(jù)的源地址和目的地址信息。UDP通信在需要快速數(shù)據(jù)傳輸和實(shí)時(shí)性要求較高的應(yīng)用中廣泛使用。UDP協(xié)議是無(wú)連接的通信協(xié)議,將數(shù)據(jù)封裝成數(shù)據(jù)包報(bào),直接發(fā)送出去,每個(gè)數(shù)據(jù)報(bào)的大小限制在64K以內(nèi),發(fā)送數(shù)據(jù)結(jié)束時(shí)無(wú)需釋放資源。因?yàn)閁DP不需要建立連接就能發(fā)送數(shù)據(jù),所以它是一種不可靠的網(wǎng)絡(luò)通信協(xié)議,優(yōu)點(diǎn)是效率高,缺點(diǎn)是容易丟失數(shù)據(jù)。一些視頻、音頻大多采用這種方式傳輸,即使丟失幾個(gè)數(shù)據(jù)包,也不會(huì)對(duì)觀看或收聽(tīng)產(chǎn)生較大影響。UDP的傳輸過(guò)程如圖任務(wù)8-2模擬簡(jiǎn)單的局域網(wǎng)聊天程序-數(shù)據(jù)報(bào)通信主機(jī)1向主機(jī)2發(fā)送數(shù)據(jù),主機(jī)2向主機(jī)1發(fā)送數(shù)據(jù),這是UDP傳輸數(shù)據(jù)的過(guò)程,不需要建立連接,直接發(fā)送即可DatagramPacket類DatagramPacket類用于封裝UDP協(xié)議通信中發(fā)送或接收的數(shù)據(jù)。在UDP協(xié)議通信中,數(shù)據(jù)被分割成一個(gè)個(gè)的數(shù)據(jù)包報(bào)(即DatagramPacket對(duì)象)進(jìn)行傳輸。DatagramPacket類提供了多個(gè)構(gòu)造函數(shù)來(lái)創(chuàng)建發(fā)送端和接收端的DatagramPacket對(duì)象,下面介紹DatagramPacket類的構(gòu)造函數(shù)。DatagramPacket(byte[]buf,intlength):創(chuàng)建一個(gè)DatagramPacket對(duì)象,用于接收數(shù)據(jù)。其中,buf是一個(gè)字節(jié)數(shù)組,用于存放接收到的數(shù)據(jù);length指定接收到的數(shù)據(jù)長(zhǎng)度。DatagramPacket(byte[]buf,intoffset,intlength):與前面構(gòu)造函數(shù)類似,但增加了offset參數(shù),該參數(shù)指定數(shù)據(jù)在buf數(shù)組中的起始位置。DatagramPacket(byte[]buf,intlength,InetAddressaddress,intport):創(chuàng)建一個(gè)DatagramPacket對(duì)象,用于發(fā)送數(shù)據(jù)。其中,buf是包含要發(fā)送數(shù)據(jù)的字節(jié)數(shù)組;length是數(shù)據(jù)的長(zhǎng)度;address是目標(biāo)主機(jī)的IP地址;port是目標(biāo)主機(jī)的端口號(hào)。DatagramPacket(byte[]buf,intoffset,intlength,InetAddressaddress,intport):與前面構(gòu)造函數(shù)類似,但增加了offset參數(shù),該參數(shù)指定數(shù)據(jù)在buf數(shù)組中的起始位置。任務(wù)8-2模擬簡(jiǎn)單的局域網(wǎng)聊天程序-數(shù)據(jù)報(bào)通信DatagramPacket類除了上述構(gòu)造方法之外,DatagramPacket類還提供了一些常用方法,具體如表任務(wù)8-2模擬簡(jiǎn)單的局域網(wǎng)聊天程序-數(shù)據(jù)報(bào)通信方法聲明功能描述InetAddressgetAddress()獲取DatagramPacket對(duì)象的目標(biāo)IP地址intgetPort()獲取DatagramPacket對(duì)象的目標(biāo)端口號(hào)byte[]getData()獲取包含數(shù)據(jù)的字節(jié)數(shù)組intgetLength()獲取DatagramPacket對(duì)象中的數(shù)據(jù)長(zhǎng)度DatagramSocket類DatagramSocket類用于實(shí)現(xiàn)基于UDP協(xié)議的網(wǎng)絡(luò)通信。DatagramSocket類提供了多個(gè)構(gòu)造函數(shù)來(lái)創(chuàng)建發(fā)送端和接收端的DatagramSocket對(duì)象,下面介紹DatagramSocket類的構(gòu)造函數(shù)。

DatagramSocket():用于創(chuàng)建發(fā)送端的DatagramSocket對(duì)象,并且沒(méi)有指定端口號(hào),系統(tǒng)會(huì)默認(rèn)分配一個(gè)沒(méi)有被其它網(wǎng)絡(luò)程序所使用的端口號(hào)。

DatagramSocket(intport):用于創(chuàng)建發(fā)送端或接收端的DatagramSocket對(duì)象,在創(chuàng)建接收端的DatagramSocket對(duì)象時(shí),必須要指定一個(gè)端口號(hào),這樣可以監(jiān)聽(tīng)指定的端口。

DatagramSocket(intport,InetAddressaddr):通過(guò)指定的端口號(hào)和IP地址創(chuàng)建DatagramSocket對(duì)象,這種情況適用于計(jì)算機(jī)上有多塊網(wǎng)卡的情況,可以明確規(guī)定數(shù)據(jù)通過(guò)哪塊網(wǎng)卡向外發(fā)送和接收哪塊網(wǎng)卡的數(shù)據(jù)。任務(wù)8-2模擬簡(jiǎn)單的局域網(wǎng)聊天程序-數(shù)據(jù)報(bào)通信DatagramSocket類除了上述構(gòu)造方法之外,DatagramSocket類還提供了一些常用方法,具體如表任務(wù)8-2模擬簡(jiǎn)單的局域網(wǎng)聊天程序-數(shù)據(jù)報(bào)通信方法聲明功能描述voidreceive(DatagramPacketp)用于接收DatagramPacket數(shù)據(jù)報(bào),在接收到數(shù)據(jù)之前會(huì)一直處于阻塞狀態(tài),如果發(fā)送消息的長(zhǎng)度比數(shù)據(jù)報(bào)長(zhǎng),則消息將會(huì)被截取voidsend(DatagramPacketp)用于發(fā)送DatagramPacket數(shù)據(jù)報(bào),發(fā)送的數(shù)據(jù)報(bào)中包含將要發(fā)送的數(shù)據(jù)、數(shù)據(jù)的長(zhǎng)度、遠(yuǎn)程主機(jī)的IP地址和端口號(hào)voidclose()關(guān)閉當(dāng)前的Socket,通知驅(qū)動(dòng)程序釋放為這個(gè)Socket保留的資源簡(jiǎn)單的UDP通信程序例8-2所示,首先創(chuàng)建一個(gè)接收端程序,在Chapter08程序的work包中創(chuàng)建UDPReceiver類,在該類中實(shí)現(xiàn)接收端程序,具體代碼如UDPReceiver.java任務(wù)8-2模擬簡(jiǎn)單的局域網(wǎng)聊天程序-數(shù)據(jù)報(bào)通信1packagework;2import.DatagramPacket;3import.DatagramSocket;4publicclassUDPReceiver{5 publicstaticvoidmain(String[]args)throwsException{6 //創(chuàng)建DatagramSocket對(duì)象,指定端口號(hào)為88017 DatagramSocketds=newDatagramSocket(8801);8 byte[]by=newbyte[1024];//創(chuàng)建接收數(shù)據(jù)的數(shù)組

9 //創(chuàng)建DatagramPacket對(duì)象,用于接收數(shù)據(jù)

10 DatagramPacketdp=newDatagramPacket(by,by.length);11 System.out.println("等待接收數(shù)據(jù)...");12 ds.receive(dp);//等待接收數(shù)據(jù),沒(méi)有數(shù)據(jù)會(huì)阻塞

13 //獲得接收數(shù)據(jù)的內(nèi)容和長(zhǎng)度

14 Stringstr=newString(dp.getData(),0,dp.getLength());15 //打印接收到的信息

16 System.out.println(str+"-->"+dp.getAddress().getHostAddress()17+":"+dp.getPort());18 ds.close();19 }20}簡(jiǎn)單的UDP通信程序例8-3所示,接下來(lái)創(chuàng)建一個(gè)發(fā)送端程序,在Chapter08程序的work包中創(chuàng)建UDPSender類,在該類中實(shí)現(xiàn)發(fā)送端程序,具體代碼如UDPSender.java任務(wù)8-2模擬簡(jiǎn)單的局域網(wǎng)聊天程序-數(shù)據(jù)報(bào)通信1packagework;2import.DatagramPacket;3import.DatagramSocket;4import.InetAddress;5publicclassUDPSender{6 publicstaticvoidmain(String[]args)throwsException{7 //創(chuàng)建一個(gè)指定端口號(hào)為4000的發(fā)送端DatagramSocket對(duì)象

8 DatagramSocketclient=newDatagramSocket(4000);9 //定義要發(fā)送的數(shù)據(jù)

10 Stringstr="helloworld";11 //創(chuàng)建一個(gè)DatagramPacket數(shù)據(jù)報(bào)對(duì)象,封裝發(fā)送端信息以及發(fā)送地址

12 DatagramPacketpacket=newDatagramPacket(str.getBytes(),13 str.getBytes().length,14 InetAddress.getByName("localhost"),8801);15 System.out.println("開(kāi)始發(fā)送信息...");16 client.send(packet);//發(fā)送數(shù)據(jù)

17 client.close();//釋放資源

18 }19}1.在Chapter08程序的com.example.task包中創(chuàng)建LANChat類,用于實(shí)現(xiàn)聊天窗口界面。在LANChat類中使用多線程啟動(dòng)聊天程序的接收端和服務(wù)端。2.在com.example.task包中創(chuàng)建ChatReceiver類并實(shí)現(xiàn)Runnable接口,用于實(shí)現(xiàn)接收信息的功能。3.在com.example.task包中創(chuàng)建ChatSend類并實(shí)現(xiàn)Runnable接口,用于實(shí)現(xiàn)發(fā)送信息的功能。

代碼參考教材中的LANChat.javaChatReceiver.javaChatSend.java任務(wù)8-2模擬簡(jiǎn)單的局域網(wǎng)聊天程序-任務(wù)實(shí)現(xiàn)上述代碼中,第13~22行代碼使用Scanner對(duì)象和循環(huán)方法獲取鍵盤輸入的聊天信息,并將獲取到的數(shù)據(jù)buf封裝到DatagramPacket對(duì)象中,第21行代碼調(diào)用send()方法發(fā)送數(shù)據(jù)。運(yùn)行兩次LANChat類,會(huì)開(kāi)啟兩個(gè)Console控制臺(tái)窗口模擬兩個(gè)聊天窗口,如圖任務(wù)8-2模擬簡(jiǎn)單的局域網(wǎng)聊天程序-任務(wù)實(shí)現(xiàn)可以看出顯示了兩個(gè)Console控制臺(tái),名稱分別是1LANChat與21LANChat。打開(kāi)這兩個(gè)控制臺(tái),分別輸入當(dāng)前啟動(dòng)的端口號(hào)與發(fā)送信息的目標(biāo)端口號(hào),如圖在兩個(gè)控制臺(tái)窗口中分別輸入聊天的內(nèi)容,聊天的效果如圖任務(wù)8-2模擬簡(jiǎn)單的局域網(wǎng)聊天程序-任務(wù)實(shí)現(xiàn)03任務(wù)8-3模擬簡(jiǎn)單的在線訂購(gòu)系統(tǒng)套接字通信概述ServerSocket類Socket類簡(jiǎn)單的TCP通信程序多線程TCP通信程序套接字通信概述套接字通信可以讓不同主機(jī)上的應(yīng)用進(jìn)程方便地進(jìn)行數(shù)據(jù)交換和通信,從而實(shí)現(xiàn)各種復(fù)雜的網(wǎng)絡(luò)功能。套接字由IP地址和端口號(hào)組成,用于唯一標(biāo)識(shí)網(wǎng)絡(luò)中的通信端點(diǎn),IP地址用于標(biāo)識(shí)網(wǎng)絡(luò)上的主機(jī)或設(shè)備,而端口號(hào)用于標(biāo)識(shí)網(wǎng)絡(luò)上的不同應(yīng)用程序或服務(wù)。套接字通信通常使用TCP協(xié)議,TCP協(xié)議是面向連接的通信協(xié)議,使用TCP協(xié)議前,須先采用“三次握手”方式建立TCP連接,形成數(shù)據(jù)傳輸通道,在連接中可進(jìn)行大數(shù)據(jù)量的傳輸,傳輸完畢要釋放已建立的連接,TCP是一種可靠的網(wǎng)絡(luò)通信協(xié)議,它的優(yōu)點(diǎn)是數(shù)據(jù)傳輸安全和完整,缺點(diǎn)是效率低。一些對(duì)完整性和安全性要求高的數(shù)據(jù)采用TCP協(xié)議傳輸。TCP的“三次握手”如圖任務(wù)8-3模擬簡(jiǎn)單的在線訂購(gòu)系統(tǒng)-接字通信ServerSocket類在服務(wù)器端,ServerSocket類用于創(chuàng)建一個(gè)監(jiān)聽(tīng)套接字,該套接字綁定到特定的IP地址和端口號(hào),并等待客戶端的連接請(qǐng)求。一旦有客戶端連接到該套接字,ServerSocket類就可以接受該連接,并返回一個(gè)新的Socket對(duì)象,該對(duì)象代表與客戶端的連接。ServerSocket類提供了多個(gè)構(gòu)造方法,這些構(gòu)造方法的具體介紹如下。ServerSocket():創(chuàng)建沒(méi)有指定端口號(hào)的ServerSocket對(duì)象,使用該對(duì)象時(shí)還需要調(diào)用bind(SocketAddressendpoint)方法將其綁定到指定的端口號(hào)上。ServerSocket(intport):創(chuàng)建ServerSocket對(duì)象,同時(shí)將其綁定到指定的端口號(hào)上。如果port參數(shù)值為0,此時(shí)系統(tǒng)會(huì)分配一個(gè)未被其他程序占用的端口號(hào)。ServerSocket(intport,intbacklog):該構(gòu)造方法在第2個(gè)構(gòu)造方法基礎(chǔ)上增加了參數(shù)backlog,該參數(shù)于指定在服務(wù)器忙時(shí),可以與之保持連接請(qǐng)求的等待客戶端數(shù)量,如果沒(méi)有指定這個(gè)參數(shù),默認(rèn)為50。ServerSocket(intport,intbacklog,InetAddressbindAddr):該構(gòu)造方法在第3個(gè)構(gòu)造方法的基礎(chǔ)上指定了相關(guān)的IP地址,這種情況適用于計(jì)算機(jī)上有多塊網(wǎng)卡和多個(gè)IP的情況。任務(wù)8-3模擬簡(jiǎn)單的在線訂購(gòu)系統(tǒng)-接字通信ServerSocket類在服務(wù)器端,ServerSocket類用于創(chuàng)建一個(gè)監(jiān)聽(tīng)套接字,該套接字綁定到特定的IP地址和端口號(hào),并等待客戶端的連接請(qǐng)求。一旦有客戶端連接到該套接字,ServerSocket類就可以接受該連接,并返回一個(gè)新的Socket對(duì)象,該對(duì)象代表與客戶端的連接。ServerSocket類提供了多個(gè)構(gòu)造方法,這些構(gòu)造方法的具體介紹如下。ServerSocket():創(chuàng)建沒(méi)有指定端口號(hào)的ServerSocket對(duì)象,使用該對(duì)象時(shí)還需要調(diào)用bind(SocketAddressendpoint)方法將其綁定到指定的端口號(hào)上。ServerSocket(intport):創(chuàng)建ServerSocket對(duì)象,同時(shí)將其綁定到指定的端口號(hào)上。如果port參數(shù)值為0,此時(shí)系統(tǒng)會(huì)分配一個(gè)未被其他程序占用的端口號(hào)。ServerSocket(intport,intbacklog):該構(gòu)造方法在第2個(gè)構(gòu)造方法基礎(chǔ)上增加了參數(shù)backlog,該參數(shù)于指定在服務(wù)器忙時(shí),可以與之保持連接請(qǐng)求的等待客戶端數(shù)量,如果沒(méi)有指定這個(gè)參數(shù),默認(rèn)為50。ServerSocket(intport,intbacklog,InetAddressbindAddr):該構(gòu)造方法在第3個(gè)構(gòu)造方法的基礎(chǔ)上指定了相關(guān)的IP地址,這種情況適用于計(jì)算機(jī)上有多塊網(wǎng)卡和多個(gè)IP的情況。任務(wù)8-3模擬簡(jiǎn)單的在線訂購(gòu)系統(tǒng)-接字通信ServerSocket類除了上述構(gòu)造方法之外,ServerSocket類還提供了一些常用方法,具體如表任務(wù)8-3模擬簡(jiǎn)單的在線訂購(gòu)系統(tǒng)-接字通信方法聲明功能描述Socketaccept()用于等待客戶端的連接,在客戶端連接之前一直處于阻塞狀態(tài),如果有客戶端連接就會(huì)返回一個(gè)與之對(duì)應(yīng)的Socket對(duì)象InetAddressgetInetAddress()用于返回一個(gè)InetAddress對(duì)象,該對(duì)象中封裝了ServerSocket綁定的IP地址booleanisClosed()用于判斷ServerSocket對(duì)象是否為關(guān)閉狀態(tài),如果是關(guān)閉狀態(tài)則返回true,反之則返回falsevoidbind(SocketAddressendpoint)用于將ServerSocket對(duì)象綁定到指定的IP地址和端口號(hào),其中參數(shù)endpoint封裝了IP地址和端口號(hào)Socket類Socket類是Java中用于創(chuàng)建客戶端套接字的類,它的主要作用是提供一種機(jī)制,讓客戶端與服務(wù)器建立網(wǎng)絡(luò)連接,進(jìn)行數(shù)據(jù)傳輸和通信。Socket類提供了一些構(gòu)造方法,具體介紹如下。Socket():使用該構(gòu)造方法在創(chuàng)建Socket對(duì)象時(shí),并沒(méi)有指定IP地址和端口號(hào),也就意味著只創(chuàng)建了客戶端對(duì)象,并沒(méi)有去連接任何服務(wù)器。通過(guò)該構(gòu)造方法創(chuàng)建對(duì)象后還需調(diào)用connect(SocketAddressendpoint)方法,才能完成與指定服務(wù)器端的連接,其中參數(shù)endpoint用于封裝IP地址和端口號(hào)。Socket(Stringhost,intport):使用該構(gòu)造方法在創(chuàng)建Socket對(duì)象時(shí),會(huì)根據(jù)參數(shù)去連接在指定地址和端口上運(yùn)行的服務(wù)器程序,其中參數(shù)host接收的是一個(gè)字符串類型的IP地址。Socket(InetAddressaddress,intport):該方法在使用上與第2個(gè)構(gòu)造方法類似,參數(shù)address用于接收一個(gè)InetAddress類型的對(duì)象,該對(duì)象用于封裝一個(gè)IP地址。任務(wù)8-3模擬簡(jiǎn)單的在線訂購(gòu)系統(tǒng)-接字通信Socket類除了上述構(gòu)造方法之外,Socket類還提供了一些常用方法,具體如表任務(wù)8-3模擬簡(jiǎn)單的在線訂購(gòu)系統(tǒng)-接字通信方法聲明功能描述intgetPort()返回服務(wù)端的端口號(hào)InetAddressgetLocalAddress()獲取本地客戶端的IP地址voidclose()關(guān)閉Socket連接,釋放與之關(guān)聯(lián)的系統(tǒng)資源InputStreamgetInputStream()獲取輸入流的同時(shí)返回一個(gè)InputStream對(duì)象,用于從連接中讀取數(shù)據(jù)OutputStreamgetOutputStream()獲取輸出流的同時(shí)返回一個(gè)OutputStream對(duì)象,用于向連接中寫入數(shù)據(jù)Socket類除了上述構(gòu)造方法之外,Socket類還提供了一些常用方法,具體如表任務(wù)8-3模擬簡(jiǎn)單的在線訂購(gòu)系統(tǒng)-接字通信方法聲明功能描述intgetPort()返回服務(wù)端的端口號(hào)InetAddressgetLocalAddress()獲取本地客戶端的IP地址voidclose()關(guān)閉Socket連接,釋放與之關(guān)聯(lián)的系統(tǒng)資源InputStreamgetInputStream()獲取輸入流的同時(shí)返回一個(gè)InputStream對(duì)象,用于從連接中讀取數(shù)據(jù)OutputStreamgetOutputStream()獲取輸出流的同時(shí)返回一個(gè)OutputStream對(duì)象,用于向連接中寫入數(shù)據(jù)服務(wù)器端和客戶端的數(shù)據(jù)傳輸,如圖簡(jiǎn)單的TCP通信程序如例8-5所示,首先創(chuàng)建一個(gè)服務(wù)器端程序,在Chapter08程序的work包中創(chuàng)建TCPServer類,在該類中實(shí)現(xiàn)服務(wù)器端程序,具體代碼TCPServer.java完成了服務(wù)器端程序的編寫后,接下來(lái)編寫客戶端程序如例8-6所示。首先在Chapter08程序的work包中創(chuàng)建TCPClient類,在該類中實(shí)現(xiàn)客戶端程序,具體代碼TCPClient.java任務(wù)8-3模擬簡(jiǎn)單的在線訂購(gòu)系統(tǒng)-接字通信運(yùn)行

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論