Java網路程式設計,有助於解決實際問題, (轉)
什麼是套接字(Socket)?
Network API是典型的用於基於網路Java與其他程式通訊,Network API依靠Socket進行通訊。Socket可以看成在兩個程式進行通訊連線中的一個端點,一個程式將一段資訊寫入Socket中,該Socket將這段資訊傳送給另外一個Socket中,使這段資訊能傳送到其他程式中。如圖1:namespace prefix = o ns = "urn:schemas--com::office" />
我們來分析一下圖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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JAVA程式設計題-用java解決兔子問題Java程式設計
- 解決java網路程式設計IPv6問題Java程式設計
- 怎麼解決程式設計師上網問題程式設計師
- 關於PHP程式設計師解決問題的能力PHP程式設計師
- Java實驗——基於GUI的網路通訊程式設計JavaGUI程式設計
- 求教 banq 大哥關於網際網路問題
- 簡單的設定:解決Win XP網路訪問難題(轉)
- 程式設計師面試常問計算機網路問題程式設計師面試計算機網路
- 程式設計師如何實現“網際網路+”09-如何提高轉化率程式設計師
- 網際網路需要解決這幾個問題,才能真正扎進實體經濟
- 工程中實際問題解決兩例——基於C#C#
- Java的網路功能與程式設計 一 (轉)Java程式設計
- 關於java安全性程式設計問題求助!!!Java程式設計
- 用邏輯迴歸模型解決網際網路金融信用風險問題邏輯迴歸模型
- 關於網路硬體配置出現問題,無法上網問題的解決
- 關於程式設計師寫文件(網路轉載)程式設計師
- 關於解決 Java 程式語言執行緒問題的建議(4)(轉)Java執行緒
- 關於解決 Java 程式語言執行緒問題的建議(3)(轉)Java執行緒
- 關於解決 Java 程式語言執行緒問題的建議(2)(轉)Java執行緒
- 關於解決 Java 程式語言執行緒問題的建議(1)(轉)Java執行緒
- 解決oracle網路連線問題Oracle
- 解決問題的能力 > 10倍程式設計師程式設計師
- 程式設計師解決問題的 60 個策略程式設計師
- 程式設計師解決問題的60個策略程式設計師
- java併發程式設計 --併發問題的根源及主要解決方法Java程式設計
- Java併發程式設計-解決可見性與有序性問題Java程式設計
- 關於網路的一點問題(轉)
- java的socket程式設計問題Java程式設計
- 設計不等於藝術。合理運用“藝術”解決設計問題
- 基於WinSNMP的網路管理程式設計----原理與實踐(摘要) (轉)程式設計
- 從實際問題看 SwiftUI 和 Combine 程式設計SwiftUI程式設計
- 有助於改善效能的Java程式碼技巧Java
- 一線網際網路常見的14個Java面試題,你顫抖了嗎程式設計師Java面試題程式設計師
- JAVA程式設計師怎麼樣才能進一線網際網路公司Java程式設計師
- 重新設計網際網路!網際網路全新地圖已經解鎖——《騰雲》有獎問答搶贈書!地圖
- 消除假確定性並解決實際問題
- Unix shell解決實際問題指令碼(1)指令碼
- Unix shell解決實際問題指令碼(2)指令碼