網(wǎng)絡(luò)編程實(shí)驗(yàn)指導(dǎo)_第1頁
網(wǎng)絡(luò)編程實(shí)驗(yàn)指導(dǎo)_第2頁
網(wǎng)絡(luò)編程實(shí)驗(yàn)指導(dǎo)_第3頁
網(wǎng)絡(luò)編程實(shí)驗(yàn)指導(dǎo)_第4頁
網(wǎng)絡(luò)編程實(shí)驗(yàn)指導(dǎo)_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、網(wǎng)絡(luò)編程實(shí)驗(yàn)指導(dǎo)書(適用于計(jì)算機(jī)科學(xué)與技術(shù)、網(wǎng)絡(luò)工程專業(yè)、軟件工程專業(yè)、信息安全專業(yè)、智能科學(xué)與技術(shù)專業(yè))計(jì)算機(jī)科學(xué)與工程學(xué)院軟件教研室2011-10實(shí)驗(yàn)1 Winpcap通信設(shè)計(jì)一、目的與要求掌握Winpcap常用API函數(shù)的使用。掌握Winpcap包過濾的建立方法。掌握Winpcap包過濾條件的建立方法。二、實(shí)驗(yàn)環(huán)境VC+ IDE編程環(huán)境,Windows XP系統(tǒng)三、內(nèi)容和步驟獲取網(wǎng)絡(luò)接口列表通常,一個(gè)基于WinPcap的應(yīng)用程序所要做的第一件事,就是獲得適合的網(wǎng)絡(luò)接口的列 表。Libpcap中的pcap_findalldevs(涵數(shù)就是實(shí)現(xiàn)該功能的。這個(gè)函數(shù)然回一個(gè)pcap_if結(jié)構(gòu) 的

2、列表,每個(gè)元素都記錄了一個(gè)接口的信息.其中,name和description以人類可以閱讀的形 式,記錄了設(shè)備的信息。下面的源代碼輸出可用的網(wǎng)絡(luò)接口的列表,并且在沒有找到任何借口的情況下輸出錯(cuò) 誤信息:#include pcap.hmain()pcap_if_t *alldevs;pcap_if_t *d;int i=0;char errbufPCAP_ERRBUF_SIZE;/*取得列表*/if (pcap_findalldevs(&alldevs, errbuf) = -1)fprintf(stderr,Error in pcap_findalldevs: %sn, errbuf);exi

3、t(1);/*輸出列表*/for(d=alldevs;d;d=d-next)printf(%d. %s, +i, d-name);if (d-description)printf( (%s)n, d-description);else/* Y-沒有有效的描述*/printf( (No description available);if(i=0)/* Y-沒有有效的接口,可能是因?yàn)闆]有安裝WinPcap */printf(nNo interfaces found! Make sure WinPcap is installed.);return;/*不再需要列表了,釋放*/pcap_freeall

4、devs(alldevs);和其他的libpcap函數(shù)一樣,pcap_findalldevs(),有一個(gè)錯(cuò)誤緩沖區(qū)(errbuf)參數(shù).這個(gè)參 數(shù)是一個(gè)字符串指針,一旦發(fā)生錯(cuò)誤,libpcap將會(huì)在這里填入錯(cuò)誤描述.然后,請(qǐng)注意, pcap_findalldev系統(tǒng)下的s()函數(shù)同時(shí)也被UNIX下的libpcap所支持,但是并不是所有的操 作系統(tǒng)都支持“網(wǎng)絡(luò)接口描述(description)這一項(xiàng).所以,如果我們想寫一個(gè)可以移植的的應(yīng) 用程序,那么我們必須要為描述為“空” (null)的情況做好準(zhǔn)備:遇到這種情況我們就輸出一個(gè) “沒有有效的描述”的消息.最后我們通過pcap_freeallde

5、vs(涵數(shù)來釋放接口列表.現(xiàn)在讓我們編譯并運(yùn)行我們的第一個(gè)WinPcap程序.如果你使用UNIX或者Cgywin的 話,你只需要以下命令:gcc -o testaprog testprog.c -lpcap在Windows環(huán)境中(Y -如果你使用Microsoft Visual C+),你需要建立一個(gè)工程,按照 Using WinPcap in your programs 一節(jié)中說明來做.不過,建議參照Winpcap開發(fā)者包(WinPcap developers pack)中的例子,那些例子包括了 所以配置完善的工程,以及全部你所需要的庫和包含文件.假設(shè)現(xiàn)在已經(jīng)成功編譯了程序,運(yùn)行如下.在Wi

6、nXP工作站上,輸出結(jié)果是:4E273621-5161-46C8-895A-48D0E52A0B83 (Realtek RTL8029(AS) Ethernet Adapter)5D24AE04-C486-4A96-83FB-8B5EC6C7F430 (3Com EtherLink PCI)就如上所示,網(wǎng)絡(luò)接口的名稱(當(dāng)打開這個(gè)接口時(shí),需要傳遞這個(gè)名稱給libpcap庫)在 windows環(huán)境下幾乎是沒有辦法讀懂的,所以輸出一個(gè)描述對(duì)于你的用戶來說是非常有幫助 的.附注: Microsoft Visual C+工程的設(shè)置下載并安裝WinPcap,推薦的版本是3.0從 HYPERLINK htt

7、p:/winpcap.polito.it http:/winpcap.polito.it 下載 WinPcap Developers Pack 并解壓縮用 Microsoft Visual C+ 建立一個(gè)空工程(empty project)復(fù)制源代碼把 Winpcap Developers Pack中的Includes目錄添加為新的包含文件目錄添加庫 wpcap.lib 和 wsock32.lib。獲取設(shè)備的高級(jí)信息上面介紹了如何獲取一個(gè)設(shè)備的基本信息(比如設(shè)備名稱和設(shè)備描述).實(shí)際上,WinPcap 也可以為我們提供關(guān)于接口的更多信息.由pcap_findalldevs()函數(shù)返回的pcap

8、_if結(jié)構(gòu)也 包含了一個(gè)pcap_addr結(jié)構(gòu)的列表,它記錄了以下信息:接口的地址列表接口的掩碼列表(與地址列表一一對(duì)應(yīng))接口的廣播地址列表(與地址列表一一對(duì)應(yīng))目標(biāo)地址列表(與地址列表對(duì)應(yīng))打開一個(gè)接口并捕捉流量現(xiàn)在已經(jīng)知道如何獲取一個(gè)接口的有關(guān)信息了,下面打開一個(gè)接口并捕捉流量.在這一 節(jié)里,編譯一個(gè)程序,它將捕捉網(wǎng)絡(luò)中所有的數(shù)據(jù)包并輸出他們的一些相關(guān)信息。使用函數(shù) pcap_open_live()來打開一個(gè)捕捉設(shè)備.這里,需要解釋一下snaplen, promisc和to_ms參 數(shù).snaplen”參數(shù)指定了要捕捉的數(shù)據(jù)包的部分.在某些操作系統(tǒng)中(如xBSD和 Win32),驅(qū)動(dòng)程序提

9、供了只捕捉每個(gè)數(shù)據(jù)包其中一部分的可能性:這樣就降低了要處理的數(shù) 據(jù)的量,從而提高了捕捉程序的效率.在例子中,我們使用一個(gè)高出 MTU最大值的值 (65536)以確??梢圆蹲降匠蓚€(gè)數(shù)據(jù)包.promisc表明接口將會(huì)被設(shè)置為混雜模式.一般情況下,接口只處理目標(biāo)地址為自己 的數(shù)據(jù);到其他主機(jī)的數(shù)據(jù)包將會(huì)被忽略.然而當(dāng)一個(gè)接口處于混雜模式時(shí),它將會(huì)處理全 部的流量:也就是說,在共享媒介。例如非交換型以太網(wǎng)中,WinPcap可以捕捉到所有主機(jī) 的數(shù)據(jù)包.混在模式是多數(shù)捕捉程序的默認(rèn)模式,所以我們?cè)诶又幸膊捎眠@種模式.to_ms用以設(shè)置超時(shí),單位是毫秒,一個(gè)從接口讀取的操作,(例如pcap_dispat

10、ch()或 者pcap_next_ex(),如果沒有捕捉到數(shù)據(jù)包,那么在超過指定的時(shí)間以后就會(huì)返回.進(jìn)一步 說,如果接口處在靜態(tài)模式中,to_ms也定義了靜態(tài)報(bào)告的間隔時(shí)間(參閱Gathering Statistics on the network traffic 以獲取更多信息).設(shè)置to_ms為0,則說明永遠(yuǎn)不會(huì)超時(shí), 如果沒有數(shù)據(jù)包到達(dá),那么捕捉操作將會(huì)永遠(yuǎn)不會(huì)返回,而將其值設(shè)置為-1則會(huì)立刻返 回.。#include pcap.h /*數(shù)據(jù)包處理函數(shù)聲明*/void packet_handler(u_char *param, const struct pcap_pkthdr *head

11、er, const u_char *pkt_data);main()pcap_if_t *alldevs;pcap_if_t *d;int inum;int i=0;pcap_t *adhandle;char errbufPCAP_ERRBUF_SIZE;/*獲取設(shè)備列表*/if (pcap_findalldevs(&alldevs, errbuf) = -1)fprintf(stderr,Error in pcap_findalldevs: %sn, errbuf);exit(1);/*數(shù)據(jù)列表*/for(d=alldevs; d; d=d-next)printf(%d. %s, +i, d

12、-name);if (d-description)printf( (%s)n, d-description);elseprintf( (No description available)n);if(i=0)printf(nNo interfaces found! Make sure WinPcap is installed.n);return -1;printf(Enter the interface number (1-%d):,i);scanf(%d, &inum);if(inum i)printf(nInterface number out of range.n);/*釋放設(shè)備列表*/p

13、cap_freealldevs(alldevs);return -1;/*轉(zhuǎn)到選擇的設(shè)備*/for(d=alldevs, i=0; inext, i+);/*打開設(shè)備*/if ( (adhandle= pcap_open_live(d-name, /設(shè)備名65536,/捕捉完整的數(shù)據(jù)包1, /混在模式1000, /讀入超時(shí)errbuf 錯(cuò)誤緩沖)=NULL)/* Y-打開失敗*/fprintf(stderr,nUnable to open the adapter. %s is not supported by WinPcapn);/*釋放列表*/pcap_freealldevs(alldevs

14、);return -1;printf(nlistening on %s.n”, d-description);/*我們已經(jīng)不需要設(shè)備列表了,釋放它*/pcap_freealldevs(alldevs);/*開始捕捉*/pcap_loop(adhandle, 0, packet_handler, NULL);return 0;/*處理數(shù)據(jù)包的回調(diào)函數(shù)*/void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)struct tm *ltime;char timestr16

15、;/*轉(zhuǎn)換時(shí)間戳為可以閱讀的格式*/ ltime=localtime(&header-ts.tv_sec);strftime( timestr, sizeof timestr, %H:%M:%S, ltime);printf(%s,%.6d len:%dn”, timestr, header-ts.tv_usec, header-len);一旦接口被打開,pcap_dispatch()或者pcap_loop()函數(shù)將會(huì)開始捕捉.這兩個(gè)函數(shù)非 常相似,pcap_dispatch()將會(huì)在超時(shí)后直接返回,而pcap_loop()則一定要等到一定數(shù)量的 數(shù)據(jù)包被處理了以后才會(huì)返回。在本例中,pcap

16、_loop()已經(jīng)足夠我們使用了,而 pcap_dispatch() 一般應(yīng)用在更復(fù)雜的程序里.。這兩個(gè)函數(shù)都有一個(gè)回調(diào)參數(shù),只想一個(gè)處理數(shù)據(jù)包的函數(shù),如本例中的 packet_handler.每當(dāng)有新的數(shù)據(jù)包到來的時(shí)候,libpcap將會(huì)調(diào)用這個(gè)函數(shù)來處理數(shù)據(jù)包, libpcap也會(huì)提供這個(gè)數(shù)據(jù)包的一些信息:一個(gè)首部,包含了時(shí)間戳和長度信息;真實(shí)數(shù)據(jù)包 (pkt_data參數(shù)),包括各種協(xié)議首部.請(qǐng)注意,MAC CRC 一般不會(huì)出現(xiàn),因?yàn)楫?dāng)設(shè)備(網(wǎng)卡)進(jìn) 行幀確認(rèn)操作時(shí),它就已經(jīng)被移除了 .同時(shí),大部分網(wǎng)卡將會(huì)丟棄錯(cuò)誤的 CRC,所以 WinPcap基本上也不能捕捉他們。四、思考與練習(xí)Win

17、pcap API的基本語法格式是什么?包含了哪些內(nèi)容?試使用Winpcap制作特征串過濾程序,將過濾結(jié)果在網(wǎng)頁上列出來。實(shí)驗(yàn)2 Socket通信設(shè)計(jì)一、目的與要求1 .掌握Socket的定義和使用。2.掌握Winsock的定義和對(duì)象的聲明。.掌握具有不同類型Socket的訪問方式。.觀察Winsock的執(zhí)行過程。二、實(shí)驗(yàn)環(huán)境計(jì)算機(jī)一臺(tái),Windows XP系統(tǒng);VC+ IDE編程環(huán)境;三、內(nèi)容和步驟sockets (套接字)編程有三種,流式套接字(SOCK_STREAM),數(shù)據(jù)報(bào)套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket編程是采用的流式套 接字。在

18、這個(gè)程序中,將兩個(gè)工程添加到一個(gè)工作區(qū)。要鏈接一個(gè)ws2_32.lib的庫文件。加入#pragma comment (lib,ws2_32.lib)。服務(wù)器端編程的步驟:1:加載套接字庫,創(chuàng)建套接字(WSAStartup()/socket();2:綁定套接字到一個(gè)IP地址和一個(gè)端口上(bind();3:將套接字設(shè)置為監(jiān)聽模式等待連接請(qǐng)求(listen();4:請(qǐng)求到來后,接受連接請(qǐng)求,返回一個(gè)新的對(duì)應(yīng)于此次連接的套接字(accept。);:用返回的套接字和客戶端進(jìn)行通信(send()/recv();6:返回,等待另一連接請(qǐng)求;7:關(guān)閉套接字,關(guān)閉加載的套接字庫(closesocket()/WS

19、ACleanup()。服務(wù)器端代碼如下:#include #include void main()WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ) (return;if ( LOBYTE( wsaData.wVersion ) != 1 |HIBYTE( wsaData.wVersion ) != 1 ) (WSACleanup();return;SO

20、CKET sockSrv=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR);listen(sockSrv,5);SOCKADDR_IN addrClient;int len=sizeof(SOCKADDR);while(1)SOCKET soc

21、kConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);char sendBuf50;sprintf(sendBuf,Welcome %s to here!”,inet_ntoa(addrClient.sin_addr);send(sockConn,sendBuf,strlen(sendBuf)+1,0);char recvBuf50;recv(sockConn,recvBuf,50,0);printf(%sn,recvBuf);closesocket(sockConn);客戶端編程的步驟:1:加載套接字庫,創(chuàng)建套接字(WSAStartup()/so

22、cket();2:向服務(wù)器發(fā)出連接請(qǐng)求(connect();3:和服務(wù)器端進(jìn)行通信(send()/recv();4:關(guān)閉套接字,關(guān)閉加載的套接字庫(closesocket()/WSACleanup()??蛻舳说拇a如下:#include #include void main()WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ) return;if ( L

23、OBYTE( wsaData.wVersion ) != 1 |HIBYTE( wsaData.wVersion ) != 1 ) WSACleanup( );return;SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=inet_addr();addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SO

24、CKADDR);send(sockClient,hello”,strlen(hello)+1,0);char recvBuf50;recv(sockClient,recvBuf,50,0);printf(%sn,recvBuf);closesocket(sockClient);WSACleanup();四、思考與練習(xí)Socket中不同數(shù)據(jù)通信的方式是什么?怎樣定義一個(gè)UDP Socket對(duì)象?如何實(shí)現(xiàn)數(shù)據(jù)報(bào)Socket通信?實(shí)驗(yàn)3Java socket編程實(shí)驗(yàn)一、目的與要求1 .熟悉基本的java Socket程序設(shè)計(jì)的流程;2.熟悉如何利用java Socket對(duì)象來實(shí)現(xiàn)數(shù)據(jù)通信;二、實(shí)驗(yàn)環(huán)

25、境Windows XP 系統(tǒng);Java IDE編程環(huán)境;三、內(nèi)容和步驟工作過程包含以下四個(gè)基本的步驟:創(chuàng)建 Socket;打開連接到Socket的輸入/出流;按照一定的協(xié)議對(duì)Socket進(jìn)行讀/寫操作;關(guān)閉 Socket.java在包中提供了兩個(gè)類Socket和ServerSocket,分別用來表 示雙向連接的客戶端和服務(wù)端。這是兩個(gè)封裝得非常好的類,使用很方便。其構(gòu) 造方法如下:Socket(InetAddress address, int port);Socket(InetAddress address, int port, boolean stream);Socket(String ho

26、st, int prot);Socket(String host, int prot, boolean stream);Socket(SocketImpl impl)Socket(String host, int port, InetAddress localAddr, int localPort)Socket(InetAddress address, int port, InetAddress localAddr, int localPort)ServerSocket(int port);ServerSocket(int port, int backlog);ServerSocket(int

27、 port, int backlog, InetAddress bindAddr)其中address、host和port分別是雙向連接中另一方的IP地址、主機(jī)名和 端 口號(hào),stream指明socket是流socket還是數(shù)據(jù)報(bào)socket, localPort表示 本地主機(jī)的端口號(hào),localAddr和bindAddr是本地機(jī)器的地址(ServerSocket 的主機(jī)地址),impl是socket的父類,既可以用來創(chuàng)建serverSocket又可 以 用來創(chuàng)建Socket o count則表示服務(wù)端所能支持的最大連接數(shù)。例如:Socket client = new Socket(127.0.

28、01.,80);ServerSocket server = new ServerSocket(80);注意,在選擇端口時(shí),必須小心。每一個(gè)端口提供一種特定的服務(wù),只有給 出正確的端口,才 能獲得相應(yīng)的服務(wù)。1023的端口號(hào)為系統(tǒng)所保留,例如http 服務(wù)的端口號(hào)為80,telnet服務(wù)的端口號(hào)為21,ftp服務(wù)的端口號(hào)為23,所以我 們?cè)谶x擇端口號(hào)時(shí),最好選擇一個(gè)大于1023的數(shù)以防止發(fā)生沖突。在創(chuàng)建socket時(shí)如果發(fā)生錯(cuò)誤,將產(chǎn)生IOException,在程序中必須對(duì)之 作出處理。所以在創(chuàng)建Socket或ServerSocket是必須捕獲或拋出例外。簡單的Client/Server程序1.

29、客戶端程序import java.io.*;import .*;public class TalkClient (public static void main(String args) (try(Socket socket=new Socket(,4700);向本機(jī)的4700端口發(fā)出客戶請(qǐng)求BufferedReader sin=new BufferedReader(new InputStreamReader(System.in);/由系統(tǒng)標(biāo)準(zhǔn)輸入設(shè)備構(gòu)造BufferedReader對(duì)象PrintWriter os=new PrintWriter(socket.getOutputStream(

30、);/由Socket對(duì)象得到輸出流,并構(gòu)造PrintWriter對(duì)象BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream();由Socket對(duì)象得到輸入流,并構(gòu)造相應(yīng)的BufferedReader 對(duì)象String readline;readline二sin.readLine(); /從系統(tǒng)標(biāo)準(zhǔn)輸入讀入一字符串 while(!readline.equals(bye)若從標(biāo)準(zhǔn)輸入讀入的字符串為bye 則停止循環(huán) os.println(readline);將從系統(tǒng)標(biāo)準(zhǔn)輸入讀入的字符串輸出到S

31、erver os.flush();/刷新輸出流,使Server馬上收到該字符串 System.out.println(Client:+readline);在系統(tǒng)標(biāo)準(zhǔn)輸出上打印讀入的字符串System.out.println(Server:+is.readLine();從Server讀入一字符串,并打印到標(biāo)準(zhǔn)輸出上 readline二sin.readLine(); /從系統(tǒng)標(biāo)準(zhǔn)輸入讀入一字 符串 繼續(xù)循環(huán)os.close(); 關(guān)閉 Socket 輸出流is.close(); 關(guān)閉 Socket 輸入流socket.close(); 關(guān)閉 Socketcatch(Exception e) (Sy

32、stem.out.println(Error+e); /出錯(cuò),則打印出錯(cuò)信息 2.服務(wù)器端程序import java.io.*;import .*;import java.applet.Applet;public class TalkServer(public static void main(String args) (try(ServerSocket server=null;try(server=new ServerSocket(4700);創(chuàng)建一個(gè)ServerSocket在端口 4700監(jiān)聽客戶請(qǐng)求catch(Exception e) (System.out.println(can no

33、t listen to:+e);/出錯(cuò),打印出錯(cuò)信息Socket socket=null;try(socket=server.accept();使用accept()阻塞等待客戶請(qǐng)求,有客戶/請(qǐng)求到來則產(chǎn)生一個(gè)Socket對(duì)象,并繼續(xù)執(zhí)行catch(Exception e) (System.out.println(Error.+e);/出錯(cuò),打印出錯(cuò)信息String line;BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream();/由Socket對(duì)象得到輸入流,并構(gòu)造相應(yīng)的 Buffe

34、redReader 對(duì)象PrintWriter os=newPrintWriter(socket.getOutputStream();/由Socket對(duì)象得到輸出流,并構(gòu)造PrintWriter對(duì)象BufferedReader sin=new BufferedReader(new InputStreamReader(System.in);/由系統(tǒng)標(biāo)準(zhǔn)輸入設(shè)備構(gòu)造BufferedReader對(duì)象System.out.println(Client:+is.readLine();在標(biāo)準(zhǔn)輸出上打印從客戶端讀入的字符串line二sin.readLine();從標(biāo)準(zhǔn)輸入讀入一字符串while(!line.

35、equals(bye)如果該字符串為bye,則停止循環(huán)os.println(line);向客戶端輸出該字符串os.flush();/刷新輸出流,使Client馬上收到該字符串System.out.println(Server:+line);在系統(tǒng)標(biāo)準(zhǔn)輸出上打印讀入的字符串System.out.println(Client:+is.readLine();從Client讀入一字符串,并打印到標(biāo)準(zhǔn)輸出上 line二sin.readLine();/從系統(tǒng)標(biāo)準(zhǔn)輸入讀入一字符串繼續(xù)循環(huán)os.close(); 關(guān)閉 Socket 輸出流is.close(); 關(guān)閉 Socket 輸入流socket.clos

36、e(); 關(guān)閉 Socketserver.close(); 關(guān)閉 ServerSocketcatch(Exception e)(System.out.println(Error:+e);出錯(cuò),打印出錯(cuò)信息四、思考與練習(xí)1 .如何實(shí)現(xiàn)java Socket與數(shù)據(jù)庫的連接?實(shí)驗(yàn)4Java URL類通信編程一、目的與要求熟悉基本的Java URL類應(yīng)用程序設(shè)計(jì)的流程;熟悉如何利用Java URL對(duì)象處理XML文檔的應(yīng)用;二、實(shí)驗(yàn)環(huán)境Windows XP 系統(tǒng);Java IDE編程環(huán)境;三、內(nèi)容和步驟在JAVA中,J包里面的類是進(jìn)行網(wǎng)絡(luò)編程的,其中.URL類和.URLConection類使編程者方便地

37、利用URL在Internet上進(jìn)行網(wǎng)絡(luò)通信。1、創(chuàng)建URL對(duì)象URL類有多種形式的構(gòu)造函數(shù):URL ( String url)/url代表一個(gè)絕對(duì)地址,URL對(duì)象直接指向這個(gè)資源,如:URL urll=new URL( HYPERLINK );URL ( URL baseURL , String relativeURL)/其中,baseURL代表絕對(duì)地址,relativeURL代表相對(duì)地址。如:URL urll=new URL( HYPERLINK );URL lib=new URL(urll , library / library.asp);URL ( String protocol , S

38、tring host , String file)/其中,protocol代表通信協(xié)議,host代表主機(jī)名,file代表文件名。如:new URL (http , HYPERLINK , / test / test.asp);URL ( String protocol , String host , int port , String file)URL lib = new URL (http , HYPERLINK , 80 , / test / test.asp);2、獲取URL對(duì)象的屬性getDefaultPort():返回默認(rèn)的端口號(hào)。getFile():獲得URL指定資源的完整文件名。

39、getHost(): 返回主機(jī)名。getPath():返回指定資源的文件目錄和文件名。getPort():返回端口號(hào),默認(rèn)為-1。getProtocol():返回表示URL中協(xié)議的字符串對(duì)象。getRef():返回URL中的HTML文檔標(biāo)記,即#號(hào)標(biāo)記。getUserInfo: 返回用戶信息。toString:返回完整的URL字符串。二、Internet 尋址包可以用32位int形式來操作32位的IP地址(即Internet主機(jī)地址)。類 InetAddress實(shí)際上是可以把Internet地址換算成代表該地址的對(duì)象。Java就是靠這個(gè)類來顯 示Internet地址已經(jīng)相關(guān)信息的。InetAddress有以下常用方法:getAddress():返回IP地址的字節(jié)形式。getAllByName(): 返回指定主機(jī)名的IP地址。getbyAddress():返回指定字節(jié)數(shù)組的IP地址形式。getByName():返回指定主機(jī)名的IP地址對(duì)象。getHostAddress():返回主機(jī)地址的字符串形

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論