socket實(shí)驗(yàn)?zāi)0?客戶——服務(wù)器萬(wàn)能模板)_第1頁(yè)
socket實(shí)驗(yàn)?zāi)0?客戶——服務(wù)器萬(wàn)能模板)_第2頁(yè)
socket實(shí)驗(yàn)?zāi)0?客戶——服務(wù)器萬(wàn)能模板)_第3頁(yè)
socket實(shí)驗(yàn)?zāi)0?客戶——服務(wù)器萬(wàn)能模板)_第4頁(yè)
socket實(shí)驗(yàn)?zāi)0?客戶——服務(wù)器萬(wàn)能模板)_第5頁(yè)
已閱讀5頁(yè),還剩35頁(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)介

1、JAVA語(yǔ)言程序設(shè)計(jì)網(wǎng)網(wǎng) 絡(luò)絡(luò) 編編 程程主要內(nèi)容主要內(nèi)容nURLn通過(guò)通過(guò)URLConnection讀寫(xiě)讀寫(xiě)WWW資源資源nsocket通信通信n數(shù)據(jù)報(bào)通信數(shù)據(jù)報(bào)通信URL類類nURL(Uniform Resource Locator)統(tǒng)一資源定位器的簡(jiǎn)稱,它表示統(tǒng)一資源定位器的簡(jiǎn)稱,它表示Internet上某一資源的地上某一資源的地址。址。nURL的組成的組成protocol:resourceName協(xié)議名指明獲取資源所使用的傳輸協(xié)議,如協(xié)議名指明獲取資源所使用的傳輸協(xié)議,如http、ftp、gopher、file等,資源名則應(yīng)該是資源的完整地址,包括等,資源名則應(yīng)該是資源的完整地址,包括

2、主機(jī)名、端口號(hào)、文件名或文件內(nèi)部的一個(gè)引用。主機(jī)名、端口號(hào)、文件名或文件內(nèi)部的一個(gè)引用。nhttp:/ 中實(shí)現(xiàn)了類中實(shí)現(xiàn)了類URL。 qpublic URL(String spec) 例子:例子: URL urlBase = new URL( “http:/ );qpublic URL(URL context, String spec) 例子:例子: URL gamelan = new URL(http:/ URL Games = new URL(gamelan, Gamelan.game.html); URL gamelanNetwork = new URL(gamelan, G.html)

3、;qpublic URL(String protocol, String host, String file); 例子:例子: new URL(http, , /pages/G.html);qpublic URL(String protocol, String host, int port, String file); 例子:例子: URL gamelan =new URL(http,80,pages/Gwork.html);try URL myURL = new URL(. . .) catch (MalformedURLException e) . . . / exception hand

4、ler code here . . .獲取獲取URL對(duì)象的屬性對(duì)象的屬性 n一個(gè)一個(gè)URL對(duì)象生成后,其屬性是不能被改變的。通對(duì)象生成后,其屬性是不能被改變的。通過(guò)類過(guò)類URL所提供的方法,可以獲取這些屬性:所提供的方法,可以獲取這些屬性:qpublic String getProtocol()qpublic String getHost()qpublic int getPort() /如果沒(méi)有設(shè)置端口,返回如果沒(méi)有設(shè)置端口,返回-1qpublic String getFile()qpublic String getRef() /獲取該獲取該URL在文件中的相對(duì)位置在文件中的相對(duì)位置qpubl

5、ic String getQuery() /獲取該獲取該URL的查詢信息的查詢信息qpublic String getPath() /獲取該獲取該URL的路徑的路徑qpublic String getAuthority() /獲取該獲取該URL的權(quán)限信息的權(quán)限信息qpublic String getUserInfo() /獲得使用者的信息獲得使用者的信息import .*;import java.io.*; public class ParseURLpublic static void main (String args) throws Exception URL Aurl=new URL(h

6、ttp:/:80/docs/books/);URL tuto=new URL(Aurl,ro.html#DOWNLOADING);System.out.println(protocol=+ tuto.getProtocol();System.out.println(host =+ tuto.getHost();System.out.println(filename=+ tuto.getFile();System.out.println(port=+ tuto.getPort();System.out.println(ref=+tuto.getRef();System.o

7、ut.println(query=+tuto.getQuery();System.out.println(path=+tuto.getPath();System.out.println(UserInfo=+tuto.getUserInfo();System.out.println(Authority=+tuto.getAuthority(); protocol=http host = filename=/docs/books/ro.html port=80 ref=DOWNLOADING query=null path=/docs/books/r

8、o.html UserInfo=null Authority=:80 通過(guò)通過(guò)URL讀取讀取WWW信息信息n得到一個(gè)得到一個(gè)URL對(duì)象后,就可以通過(guò)它讀取指定對(duì)象后,就可以通過(guò)它讀取指定的的WWW資源。使用資源。使用URL類定義的方法:類定義的方法:qInputStream openStream();該方法與指定的該方法與指定的URL建立連接并返回建立連接并返回InputStream類類的對(duì)象以從這一連接中讀取數(shù)據(jù)。的對(duì)象以從這一連接中讀取數(shù)據(jù)。 public class URLReader public static void main(String args) throws Excepti

9、on URL tirc = new URL(http:/ );BufferedReader in = new BufferedReader(new InputStreamReader(tirc.openStream();String inputLine;while (inputLine = in.readLine() != null) System.out.println(inputLine);in.close(); ChinaRen 通過(guò)通過(guò)URLConnection讀寫(xiě)讀寫(xiě)WWW資源資源n第一步:第一步:與與URL建立連接建立連接。 try URL tirc = new URL(http:

10、/ ); URLConnectionn tc = tirc.openConnection(); catch (MalformedURLException e) / new URL() failed . . . catch (IOException e) / openConnection() failed . . .類類URLConnection也在包也在包中定義,表示中定義,表示Java程序和程序和URL在網(wǎng)絡(luò)上的通信連接在網(wǎng)絡(luò)上的通信連接。 n第二步:得到第二步:得到URLConnection對(duì)象之后,可以用對(duì)象之后,可以用如下方法得到相應(yīng)的輸入如下方法得到相應(yīng)的輸入/輸出流:輸出流:qIn

11、putStream getInputStream( )qOutputStream getOutputStream( )之后就可以讀寫(xiě)輸入之后就可以讀寫(xiě)輸入/輸出流,完成數(shù)據(jù)的讀寫(xiě)。輸出流,完成數(shù)據(jù)的讀寫(xiě)。URL url =new URL (“http:/ con=url.openConnection();DataInputStream dis=new DataInputStream (con.getInputSteam();PrintStream ps=new PrintSteam(con.getOutupSteam();String line=dis.readLine();ps.printl

12、n(“client”); socket通信通信n網(wǎng)絡(luò)上的兩個(gè)程序通過(guò)一個(gè)雙向的通信連接實(shí)網(wǎng)絡(luò)上的兩個(gè)程序通過(guò)一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)雙向鏈路的一端稱為一個(gè)現(xiàn)數(shù)據(jù)的交換,這個(gè)雙向鏈路的一端稱為一個(gè)socket。nsocket通常用來(lái)實(shí)現(xiàn)客戶方和服務(wù)方的連接。通常用來(lái)實(shí)現(xiàn)客戶方和服務(wù)方的連接。Socket CommunicationClientServerRequestResponseClientSocketServerSocketsocketsocket通信的一般結(jié)構(gòu)通信的一般結(jié)構(gòu) qserver端端listen( (監(jiān)聽(tīng)監(jiān)聽(tīng)) )某個(gè)端口是否有連接請(qǐng)求;某個(gè)端口是否有連接請(qǐng)求;q

13、client端向端向server端發(fā)出端發(fā)出connect( (連接連接) )請(qǐng)求;請(qǐng)求;qserver端向端向client端發(fā)回端發(fā)回accept(接受)消息;(接受)消息;qserver端和端和client端通過(guò)端通過(guò)send,write等方法與對(duì)等方法與對(duì)方通信。方通信。q關(guān)閉關(guān)閉socket 。 創(chuàng)建創(chuàng)建socketvSocket(InetAddress address, int port);vSocket(InetAddress address, int port, boolean stream);vSocket(String host, int port);vSocket(Stri

14、ng host, int port, boolean stream);vServerSocket(int port);vServerSocket(int port, int count);q類類Socket和和ServerSocket被定義于被定義于包,分別包,分別用來(lái)表示雙向連接的客戶端和服務(wù)器端。用來(lái)表示雙向連接的客戶端和服務(wù)器端。 n客戶端客戶端Socket的建立的建立Socket socket;try socket=new Socket(”,2000);catch(IOException e) System.out.println(Error:+e);n服務(wù)器端服務(wù)器

15、端Socket的建立的建立ServerSocket server=null;try server=new ServerSocket(2000);catch(IOException e) System.out.println(can not listen to :+e);Socket socket=null;try socket=server.accept();catch(IOException e) System.out.println(Error:+e);n打開(kāi)輸入打開(kāi)輸入/出流出流PrintStream os=new PrintStream(new BufferedOutputStream

16、(socket.getOutputStream();DataInputStream is=newDataInputStream(socket.getInputStream();關(guān)閉關(guān)閉socketnos.close();nis.close();nsocket.close();MultiTalkClient.java import java.io.*;import .*;public class MultiTalkClientint num; public static void main (String args) trySocket socket=new Socket(,4

17、700);BufferedReader sin=new BufferedReader(new InputStreamReader(System.in);PrintWriter os=new PrintWriter(new OutputStreamWriter(socket.getOutputStream();BufferedReader is=new BufferedReader(new InputStreamReader (socket.getInputStream();String readline;readline=sin.readLine();while(!readline.equal

18、s(bye)os.println(readline);os.flush();System.out.println(Client:+readline);System.out.println (Server:+is.readLine();readline=sin.readLine();os.close();is.close();socket.close(); catch(Exception e)System.out.println(Error+e); TalkServer.javaimport java.io.*;import .*;public class TalkServerpublic st

19、atic void main (String args)ServerSocket server=null;tryserver=new ServerSocket(4700);catch(Exception e)System.out.println(can not listen to :+e);Socket socket=null;int clientNum=0;while(true)trysocket=server.accept();catch(Exception e)System.out.println (Error:+e);new ServerThread(socket,clientNum)

20、.start(); clientNum+;class ServerThread extends ThreadSocket socket=null;int clientnum;public ServerThread(Socket socket,int num)this.socket=socket;clientnum=num+1;public void run() tryString line;BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream();PrintWriter os=new P

21、rintWriter(new OutputStreamWriter(socket.getOutputStream();BufferedReader sin=new BufferedReader (new InputStreamReader(System.in);line=sin.readLine();while(!line.equals(bye)os.println(line);os.flush();System.out.println(Server:+line);System.out.println(Client+clientnum+:+is.readLine();line=sin.read

22、Line();is.close();os.close();socket.close();catch(Exception e)System.out.println(Error:+e); 數(shù)據(jù)報(bào)通信數(shù)據(jù)報(bào)通信n包包中提供了兩個(gè)類用來(lái)支持?jǐn)?shù)據(jù)報(bào)通信:中提供了兩個(gè)類用來(lái)支持?jǐn)?shù)據(jù)報(bào)通信:q DatagramSocket用于在程序之間建立傳送數(shù)據(jù)報(bào)的用于在程序之間建立傳送數(shù)據(jù)報(bào)的通信連接;通信連接;q DatagramPacket用來(lái)表示一個(gè)數(shù)據(jù)報(bào)。用來(lái)表示一個(gè)數(shù)據(jù)報(bào)。 DatagramSocketn用數(shù)據(jù)報(bào)方式編寫(xiě)用數(shù)據(jù)報(bào)方式編寫(xiě)client/server程序時(shí),無(wú)論在程序時(shí),無(wú)論在客戶方還是服務(wù)方,首

23、先都要建立一個(gè)客戶方還是服務(wù)方,首先都要建立一個(gè)DatagramSocket對(duì)象,用來(lái)接收或發(fā)送數(shù)據(jù)報(bào)。對(duì)象,用來(lái)接收或發(fā)送數(shù)據(jù)報(bào)。 qDatagramSocket() ;qDatagramSocket(int prot);qDatagramSocket(int port, InetAddress laddr) ;DatagramPacketn然后使用然后使用DatagramPacket類對(duì)象作為傳輸數(shù)據(jù)類對(duì)象作為傳輸數(shù)據(jù)的載體。的載體。 qDatagramPacket(byte buf,int length);qDatagramPacket(byte buf, int length, Ine

24、tAddress addr, int port);qDatagramPacket(byte buf, int offset, int length);qDatagramPacket(byte buf, int offset, int length, InetAddress address, int port); ; 接收方接收方DatagramPacket packet=new DatagramPacket(buf, 256); socket.receive (packet); 發(fā)送方發(fā)送方 DatagramPacket packet=new DatagramPacket(buf, lengt

25、h, address, port);socket.send(packet); QuoteClient.javaimport java.io.*;import .*;import java.util.*;public class QuoteClientpublic static void main(Stringargs) throws IOExceptionif(args.length !=1) System.out.println(Usage:java QuoteClient); return; /get a datagram socketDatagramSocket socket=new D

26、atagramSocket(); /send requestbyte buf=new byte256;InetAddress address=InetAddress.getByName(args0);DatagramPacket packet=new DatagramPacket(buf, buf.length,address,4445);socket.send(packet); /get responsepacket=new DatagramPacket(buf,buf.length);socket.receive(packet); /display responseString recei

27、ved=new String(packet.getData();System.out.println(Quote of the Moment:+received); socket.close(); 服務(wù)器方程序如下:服務(wù)器方程序如下:QuoteServer.java pulic class QuoteServer public static void main(String args) throws java.io.IOException new QuoteServerThread().start(); QuoteServerThread.java import java.io.*;impor

28、t .*;import java.util.*; public class QuoteServerThread extends Thread protected DatagramSocket socket=null;protected BufferedReader in=null;protected boolean moreQuotes=true; public QuoteServerThread() throws IOException this (QuoteServerThread); public QuoteServerThread(String name) throws IOExceptionsuper (name);socket=new DatagramSocket (4445); tryin=new B

溫馨提示

  • 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)論