Java網路程式設計,有助於解決實際問題, (轉)

themoney發表於2007-10-01
Java網路程式設計,有助於解決實際問題, (轉)[@more@] 開發非常方便和強大,Java的這種力量來源於他獨有的一套強大的用於網路的 ,這些API是一系列的類和介面,均位於包java和javax.net中。在這篇文章中我們將介紹套接字(Socket)慨念,同時以例項說明如何使用Network API操縱套接字,在完成本文後,你就可以編寫網路低端通訊軟體。

  什麼是套接字(Socket)

  Network API是典型的用於基於網路Java與其他程式通訊,Network API依靠Socket進行通訊。Socket可以看成在兩個程式進行通訊連線中的一個端點,一個程式將一段資訊寫入Socket中,該Socket將這段資訊傳送給另外一個Socket中,使這段資訊能傳送到其他程式中。如圖1:namespace prefix = o ns = "urn:schemas--com::office" />

ectratio="t" v:ext="edit">Java網路程式設計,有助於解決實際問題, (轉)20030107/jt-2003-image001.gif" src="/Develop/ArticleImages/24/24004/CSDN_Dev_Image_2004-2-41116030.gif">


  我們來分析一下圖1,Host A上的程式A將一段資訊寫入Socket中,Socket的內容被Host A的軟體訪問,並將這段資訊透過Host A的網路介面卡傳送到Host B,Host B的網路介面卡接收到這段資訊後,傳送給Host B的網路管理軟體,網路管理軟體將這段資訊儲存在Host B的Socket中,然後程式B才能在Socket中閱讀這段資訊。

  假設在圖1的網路中新增第三個主機Host C,那麼Host A怎麼知道資訊被正確傳送到Host B而不是被傳送到Host C中了呢?基於TCP/IP網路中的每一個主機均被賦予了一個唯一的,IP地址是一個32位的無符號整數,由於沒有轉變成二進位制,因此通常以小數點分隔,如:198.163.227.6,正如所見IP地址均由四個部分組成,每個部分的範圍都是0-255,以表示8位地址。

  值得注意的是IP地址都是32位地址,這是IP版本4(簡稱)規定的,目前由於IPv4地址已近耗盡,所以地址正逐漸代替Ipv4地址,Ipv6地址則是128位無符號整數。

  假設第二個程式被加入圖1的網路的Host B中,那麼由Host A傳來的資訊如何能被正確的傳給程式B而不是傳給新加入的程式呢?這是因為每一個基於TCP/IP網路通訊的程式都被賦予了唯一的埠和埠號,埠是一個資訊緩衝區,用於保留Socket中的輸入/輸出資訊,埠號是一個16位無符號整數,範圍是0-65535,以區別主機上的每一個程式(埠號就像房屋中的房間號),低於256的短口號保留給標準應用程式,比如pop3的埠號就是110,每一個套接字都組合進了IP地址、埠、埠號,這樣形成的整體就可以區別每一個套接字t,下面我們就來談談兩種套接字:流套接字和自定址資料套接字。

  流套接字(Stream Socket

  無論何時,在兩個網路應用程式之間傳送和接收資訊時都需要建立一個可靠的連線,流套接字依靠TCP協議來保證資訊正確到達目的地,實際上,IP包有可能在網路中丟失或者在傳送過程中發生錯誤,任何一種情況發生,作為接受方的 TCP將聯絡傳送方TCP重新傳送這個IP包。這就是所謂的在兩個流套接字之間建立可靠的連線。

  流套接字在C/S程式中扮演一個必需的角色,客戶機程式(需要訪問某些服務的網路應用程式)建立一個扮演程式的主機的IP地址和伺服器程式(為客戶端應用程式提供服務的網路應用程式)的埠號的流套接字。

  客戶端流套接字的初始化程式碼將IP地址和埠號傳遞給客戶端主機的網路管理軟體,管理軟體將IP地址和埠號透過NIC傳遞給伺服器端主機;伺服器端主機讀到經過NIC傳遞來的資料,然後檢視伺服器程式是否處於狀態,這種監聽依然是透過套接字和埠來進行的;如果伺服器程式處於監聽狀態,那麼伺服器端網路管理軟體就向客戶機網路管理軟體發出一個積極的響應訊號,接收到響應訊號後,客戶端流套接字初始化程式碼就給客戶程式建立一個埠號,並將這個埠號傳遞給伺服器程式的套接字(伺服器程式將使用這個埠號識別傳來的資訊是否是屬於客戶程式)同時完成流套接字的初始化。

  如果伺服器程式沒有處於監聽狀態,那麼伺服器端網路管理軟體將給客戶端傳遞一個消極訊號,收到這個消極訊號後,客戶程式的流套接字初始化程式碼將丟擲一個異常物件並且不建立通訊連線,也不建立流套接字物件。這種情形就像打電話一樣,當有人的時候通訊建立,否則電話將被掛起。

  這部分的工作包括了相關聯的三個類:InetAddress, Socket, 和 ServerSocket。Address物件描繪了32位或128位IP地址,Socket物件代表了客戶程式流套接字,ServerSocket代表了服務程式流套接字,所有這三個類均位於包java.net中


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10794571/viewspace-974326/,如需轉載,請註明出處,否則將追究法律責任。

相關文章