日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JAVA教程 第八講 Java網絡編程(一)

瀏覽:24日期:2024-03-05 15:39:56

8.1 網絡編程的基本概念,TCP/IP協議簡介

8.1.1 網絡基礎知識

計算機網絡形式多樣,內容繁雜。網絡上的計算機要互相通信,必須遵循一定的協議。目前使用最廣泛的網絡協議是Internet上所使用的TCP/IP協議

網絡編程的目的就是指直接或間接地通過網絡協議與其他計算機進行通訊。網絡編程中有兩個主要的問題,一個是如何準確的定位網絡上一臺或多臺主機,另一個就是找到主機后如何可靠高效的進行數據傳輸。在TCP/IP協議中IP層主要負責網絡主機的定位,數據傳輸的路由,由IP地址可以唯一地確定Internet上的一臺主機。而TCP層則提供面向應用的可靠的或非可靠的數據傳輸機制,這是網絡編程的主要對象,一般不需要關心IP層是如何處理數據的。

目前較為流行的網絡編程模型是客戶機/服務器(C/S)結構。即通信雙方一方作為服務器等待客戶提出請求并予以響應。客戶則在需要服務時向服務器提出申請。服務器一般作為守護進程始終運行,監聽網絡端口,一旦有客戶請求,就會啟動一個服務進程來響應該客戶,同時自己繼續監聽服務端口,使后來的客戶也能及時得到服務。

8.1.2網絡基本概念

IP地址:標識計算機等網絡設備的網絡地址,由四個8位的二進制數組成,中間以小數點分隔。

如:166.111.136.3 , 166.111.52.80

主機名(hostname):網絡地址的助記名,按照域名進行分級管理。

如:www.tsinghua.edu.cn

www.fanso.com

端口號(port number):網絡通信時同一機器上的不同進程的標識。

如:80,21,23,25,其中1~1024為系統保留的端口號

服務類型(service):網絡的各種服務。

http, telnet, ftp, smtp

在Internet上IP地址和主機名是一一對應的,通過域名解析可以由主機名得到機器的IP,由于機器名更接近自然語言,容易記憶,所以使用比IP地址廣泛,但是對機器而言只有IP地址才是有效的標識符。

通常一臺主機上總是有很多個進程需要網絡資源進行網絡通訊。網絡通訊的對象準確的講不是主機,而應該是主機中運行的進程。這時候光有主機名或IP地址來標識這么多個進程顯然是不夠的。端口號就是為了在一臺主機上提供更多的網絡資源而采取得一種手段,也是TCP層提供的一種機制。只有通過主機名或IP地址和端口號的組合才能唯一的確定網絡通訊中的對象:進程。

服務類型是在TCP層上面的應用層的概念。基于TCP/IP協議可以構建出各種復雜的應用,服務類型是那些已經被標準化了的應用,一般都是網絡服務器(軟件)。讀者可以編寫自己的基于網絡的服務器,但都不能被稱作標準的服務類型。

8.1.3兩類傳輸協議:TCP;UDP

盡管TCP/IP協議的名稱中只有TCP這個協議名,但是在TCP/IP的傳輸層同時存在TCP和UDP兩個協議。

TCP是Tranfer Control Protocol的簡稱,是一種面向連接的保證可靠傳輸的協議。通過TCP協議傳輸,得到的是一個順序的無差錯的數據流。發送方和接收方的成對的兩個socket之間必須建立連接,以便在TCP協議的基礎上進行通信,當一個socket(通常都是server socket)等待建立連接時,另一個socket可以要求進行連接,一旦這兩個socket連接起來,它們就可以進行雙向數據傳輸,雙方都可以進行發送或接收操作。

UDP是User Datagram Protocol的簡稱,是一種無連接的協議,每個數據報都是一個獨立的信息,包括完整的源地址或目的地址,它在網絡上以任何可能的路徑傳往目的地,因此能否到達目的地,到達目的地的時間以及內容的正確性都是不能被保證的。

下面我們對這兩種協議做簡單比較:

使用UDP時,每個數據報中都給出了完整的地址信息,因此無需要建立發送方和接收方的連接。對于TCP協議,由于它是一個面向連接的協議,在socket之間進行數據傳輸之前必然要建立連接,所以在TCP中多了一個連接建立的時間。

使用UDP傳輸數據時是有大小限制的,每個被傳輸的數據報必須限定在64KB之內。而TCP沒有這方面的限制,一旦連接建立起來,雙方的socket就可以按統一的格式傳輸大量的數據。UDP是一個不可靠的協議,發送方所發送的數據報并不一定以相同的次序到達接收方。而TCP是一個可靠的協議,它確保接收方完全正確地獲取發送方所發送的全部數據。

總之,TCP在網絡通信上有極強的生命力,例如遠程連接(Telnet)和文件傳輸(FTP)都需要不定長度的數據被可靠地傳輸。相比之下UDP操作簡單,而且僅需要較少的監護,因此通常用于局域網高可靠性的分散系統中client/server應用程序。

讀者可能要問,既然有了保證可靠傳輸的TCP協議,為什么還要非可靠傳輸的UDP協議呢?主要的原因有兩個。一是可靠的傳輸是要付出代價的,對數據內容正確性的檢驗必然占用計算機的處理時間和網絡的帶寬,因此TCP傳輸的效率不如UDP高。二是在許多應用中并不需要保證嚴格的傳輸可靠性,比如視頻會議系統,并不要求音頻視頻數據絕對的正確,只要保證連貫性就可以了,這種情況下顯然使用UDP會更合理一些。

8.2 基于URL的高層次Java網絡編程

8.2.1一致資源定位器URL

URL(Uniform Resource Locator)是一致資源定位器的簡稱,它表示Internet上某一資源的地址。通過URL我們可以訪問Internet上的各種網絡資源,比如最常見的WWW,FTP站點。瀏覽器通過解析給定的URL可以在網絡上查找相應的文件或其他資源。

URL是最為直觀的一種網絡定位方法。使用URL符合人們的語言習慣,容易記憶,所以應用十分廣泛。而且在目前使用最為廣泛的TCP/IP中對于URL中主機名的解析也是協議的一個標準,即所謂的域名解析服務。使用URL進行網絡編程,不需要對協議本身有太多的了解,功能也比較弱,相對而言是比較簡單的,所以在這里我們先介紹在Java中如何使用URL進行網絡編程來引導讀者入門。

8.2.2 URL的組成

protocol://resourceName

協議名(protocol)指明獲取資源所使用的傳輸協議,如http、ftp、gopher、file等,資源名(resourceName)則應該是資源的完整地址,包括主機名、端口號、文件名或文件內部的一個引用。例如:

http://www.sun.com/ 協議名://主機名

http://home.netscape.com/home/welcome.html 協議名://機器名+文件名

http://www.gamelan.com:80/Gamelan/network.html#BOTTOM 協議名://機器名+端口號+文件名+內部引用

端口號是和Socket編程相關的一個概念,初學者不必在此深究,在后面會有詳細講解。內部引用是HTML中的標記,有興趣的讀者可以參考有關HTML的書籍。

8.2.3 創建一個URL

為了表示URL, java.net中實現了類URL。我們可以通過下面的構造方法來初始化一個URL對象:

(1) public URL (String spec);

 通過一個表示URL地址的字符串可以構造一個URL對象。

 URL urlBase=new URL('http://www. 263.net/')

(2) public URL(URL context, String spec);

 通過基URL和相對URL構造一個URL對象。

 URL net263=new URL ('http://www.263.net/');

 URL index263=new URL(net263, 'index.html')

(3) public URL(String protocol, String host, String file);

 new URL('http', 'www.gamelan.com', '/pages/Gamelan.net. html');

(4) public URL(String protocol, String host, int port, String file);

 URL gamelan=new URL('http', 'www.gamelan.com', 80, 'Pages/Gamelan.network.html');

注意:類URL的構造方法都聲明拋棄非運行時例外(MalformedURLException),因此生成URL對象時,我們必須要對這一例外進行處理,通常是用try-catch語句進行捕獲。格式如下:

try{

 URL myURL= new URL(…)

}catch (MalformedURLException e){

//exception handler code here

}

8.2.4 解析一個URL

一個URL對象生成后,其屬性是不能被改變的,但是我們可以通過類URL所提供的方法來獲取這些屬性:

 public String getProtocol() 獲取該URL的協議名。

 public String getHost() 獲取該URL的主機名。

 public int getPort() 獲取該URL的端口號,如果沒有設置端口,返回-1。

 public String getFile() 獲取該URL的文件名。

 public String getRef() 獲取該URL在文件中的相對位置。

 public String getQuery() 獲取該URL的查詢信息。

 public String getPath() 獲取該URL的路徑

 public String getAuthority() 獲取該URL的權限信息

 public String getUserInfo() 獲得使用者的信息

 public String getRef() 獲得該URL的錨

下面的例子中,我們生成一個URL對象,并獲取它的各個屬性。

import java.net.*;

import java.io.*;

public class ParseURL{

public static void main (String [] args) throws Exception{

URL Aurl=new URL('http://java.sun.com:80/docs/books/');

URL tuto=new URL(Aurl,'tutorial.intro.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.out.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 =java.sun.com filename=/docs/books/tutorial.intro.html

 port=80

 ref=DOWNLOADING

 query=null

 path=/docs/books/tutorial.intro.html

 UserInfo=null

 Authority=java.sun.com:80

8.2.5 從URL讀取WWW網絡資源

當我們得到一個URL對象后,就可以通過它讀取指定的WWW資源。這時我們將使用URL的方法openStream(),其定義為:

 InputStream openStream();

方法openSteam()與指定的URL建立連接并返回InputStream類的對象以從這一連接中讀取數據。

public class URLReader {

public static void main(String[] args) throws Exception {

//聲明拋出所有例外

URL tirc = new URL('http://www.tirc1.cs.tsinghua.edu.cn/');

//構建一URL對象

BufferedReader in = new BufferedReader(new InputStreamReader(tirc.openStream()));

//使用openStream得到一輸入流并由此構造一個BufferedReader對象

String inputLine;

while ((inputLine = in.readLine()) != null)

 //從輸入流不斷的讀數據,直到讀完為止

 System.out.println(inputLine); //把讀入的數據打印到屏幕上

in.close(); //關閉輸入流

}

}

8.2.6 通過URLConnetction連接WWW

通過URL的方法openStream(),我們只能從網絡上讀取數據,如果我們同時還想輸出數據,例如向服務器端的CGI程序發送一些數據,我們必須先與URL建立連接,然后才能對其進行讀寫,這時就要用到類URLConnection了。CGI是公共網關接口(Common Gateway Interface)的簡稱,它是用戶瀏覽器和服務器端的應用程序進行連接的接口,有關CGI程序設計,請讀者參考有關書籍。

類URLConnection也在包java.net中定義,它表示Java程序和URL在網絡上的通信連接。當與一個URL建立連接時,首先要在一個URL對象上通過方法openConnection()生成對應的URLConnection對象。例如下面的程序段首先生成一個指向地址http://edu.chinaren.com/index.shtml的對象,然后用openConnection()打開該URL對象上的一個連接,返回一個URLConnection對象。如果連接過程失敗,將產生IOException.

Try{

URL netchinaren = new URL ('http://edu.chinaren.com/index.shtml');

URLConnectonn tc = netchinaren.openConnection();

}catch(MalformedURLException e){ //創建URL()對象失敗

}catch (IOException e){ //openConnection()失敗

}

類URLConnection提供了很多方法來設置或獲取連接參數,程序設計時最常使用的是getInputStream()和getOurputStream(),其定義為:

 InputSteram getInputSteram();

 OutputSteram getOutputStream();

通過返回的輸入/輸出流我們可以與遠程對象進行通信。看下面的例子:

URL url =new URL ('http://www.javasoft.com/cgi-bin/backwards');

//創建一URL對象

URLConnectin con=url.openConnection();

//由URL對象獲取URLConnection對象

DataInputStream dis=new DataInputStream (con.getInputSteam());

//由URLConnection獲取輸入流,并構造DataInputStream對象

PrintStream ps=new PrintSteam(con.getOutupSteam());

//由URLConnection獲取輸出流,并構造PrintStream對象

String line=dis.readLine(); //從服務器讀入一行

ps.println('client…'); //向服務器寫出字符串 'client…'

其中backwards為服務器端的CGI程序。實際上,類URL的方法openSteam()是通過URLConnection來實現的。它等價于

openConnection().getInputStream();

基于URL的網絡編程在底層其實還是基于下面要講的Socket接口的。WWW,FTP等標準化的網絡服務都是基于TCP協議的,所以本質上講URL編程也是基于TCP的一種應用。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产美女久久| 一区二区亚洲精品| 最新日韩av| 在线成人动漫av| 久久精品免费一区二区三区| 麻豆视频在线观看免费网站黄| 老牛国内精品亚洲成av人片| 国产精品美女午夜爽爽| 国产精品久久亚洲不卡| 欧美国产另类| 久久精品国产99国产| 久久精品伊人| 国内一区二区三区| av中文资源在线资源免费观看| 97精品国产| 亚洲成人va| 最新亚洲一区| 在线成人直播| 久久亚洲视频| 日韩欧美在线精品| 国产高清亚洲| 成人片免费看| 欧美日韩一二三四| av不卡在线看| 日韩精品一区二区三区中文字幕| 国产欧美日韩视频在线| 精品三级久久久| 国产91久久精品一区二区| 亚洲黄色影院| 日韩精品一区二区三区中文| 欧美激情aⅴ一区二区三区| 国产一区二区久久久久| 欧美日韩精品免费观看视完整| 电影天堂国产精品| 亚洲精品1区| 久久国产精品免费一区二区三区| 国产一区二区视频在线看| 欧美午夜精品一区二区三区电影| 日本大胆欧美人术艺术动态| 国产伦一区二区三区| av高清不卡| 日韩一区精品视频| 乱一区二区av| 国产一区日韩一区| 亚洲精品动态| 视频在线不卡免费观看| 亚洲激情婷婷| 九九99久久精品在免费线bt| 日韩欧美二区| 一区二区三区网站| 福利一区和二区| 香蕉成人久久| 国产一区一一区高清不卡| 视频一区中文| 国产免费播放一区二区| 久久影院一区| 国产精品一区二区av交换| 99久久视频| 欧美日韩在线精品一区二区三区激情综合 | 欧美色综合网| 91欧美日韩| 免费人成在线不卡| 国产aa精品| 亚洲精品少妇| 日本精品影院| 国产精品亚洲欧美日韩一区在线 | 肉色欧美久久久久久久免费看| 最新国产精品视频| 欧洲av不卡| 国产精品毛片aⅴ一区二区三区| 久久久9色精品国产一区二区三区| 国产精品欧美在线观看| 视频一区二区三区在线| 日韩.com| 国产毛片久久| 日本一区二区高清不卡| 日韩国产欧美在线播放| 欧美粗暴jizz性欧美20| 老牛国内精品亚洲成av人片| 亚洲最新av| 亚洲一本视频| 国产不卡av一区二区| 欧美日韩午夜| 午夜在线视频一区二区区别| 蜜桃成人精品| 久久福利在线| 一区二区三区国产在线| 99久久婷婷这里只有精品| 麻豆免费精品视频| 久久成人亚洲| 日韩三区在线| 精品国产欧美| 欧美亚洲三级| 老鸭窝毛片一区二区三区| 久久久久久久久久久9不雅视频| 久久av超碰| 日本免费在线视频不卡一不卡二| 亚洲黄色影院| 蜜桃国内精品久久久久软件9| 日本久久黄色| 久久精品国内一区二区三区| 欧美欧美黄在线二区| 中文字幕乱码亚洲无线精品一区| 国产精品av一区二区| 国产+成+人+亚洲欧洲在线| 国产无遮挡裸体免费久久| 天堂va欧美ⅴa亚洲va一国产| 亚洲欧美日韩精品一区二区| re久久精品视频| 岛国av在线网站| 国产专区精品| 给我免费播放日韩视频| 久久精品国产久精国产爱| 国产精品亚洲四区在线观看| 日韩和欧美一区二区三区| 亚洲精品黄色| 日韩精品1区2区3区| 亚洲精品婷婷| 亚洲最新av| 男女男精品网站| 老牛国产精品一区的观看方式| 日韩视频久久| 99亚洲视频| 男人的天堂久久精品| 最新国产精品久久久| 综合日韩在线| 日韩高清三区| 久久精品超碰| 国产精品白浆| 精品一区二区男人吃奶| 国产福利91精品一区二区| 国产aⅴ精品一区二区三区久久| 超级白嫩亚洲国产第一| 成人羞羞在线观看网站| 久久激情一区| 亚洲国产专区校园欧美| 黄色成人在线网址| 亚洲一区二区成人| 蜜臀91精品一区二区三区| 亚洲+小说+欧美+激情+另类| 日韩综合一区二区| 日本午夜精品一区二区三区电影 | 精品国产精品国产偷麻豆 | 欧美综合二区| 亚洲自啪免费| 日韩在线电影| 国产精品宾馆| caoporn视频在线| 久久免费黄色| 亚洲少妇一区| 视频国产精品| 国产精品久久| av综合电影网站| 国产精品色网| 欧美一级全黄| 福利视频一区| 日韩午夜av| 欧美日韩调教| 欧美三级精品| 欧美午夜不卡| 日本免费一区二区视频| 久久中文字幕导航| 在线一区视频观看| 天堂成人国产精品一区| 日本天堂一区| 日本蜜桃在线观看视频| 亚洲免费网址| 国产三级一区| 日本国产精品| 五月国产精品| 国产成人在线中文字幕| 自由日本语亚洲人高潮| 亚洲精品在线二区| 精品视频在线你懂得| 91精品国产调教在线观看| 免费成人在线影院| 欧美激情视频一区二区三区免费 | 国产欧美69| 亚洲一区久久| 亚洲高清二区| 精品日韩视频| 五月综合激情| 亚洲黄色免费看| 亚洲黄色中文字幕| 国产精品白丝一区二区三区| 日韩一区亚洲二区| 久久av在线| 久久天堂影院| 国产精品嫩草99av在线| 国产精品久久久一区二区| 久久久久国产精品一区三寸 | 香蕉精品久久| 日韩国产精品久久久久久亚洲| 国产+成+人+亚洲欧洲在线| 国产女优一区| 国产精品99精品一区二区三区∴| 欧美日韩精品一本二本三本 | 欧美成人一二区| 老牛国产精品一区的观看方式| 精品久久影院|