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程式設計
- 程式設計師如何實現“網際網路+”09-如何提高轉化率程式設計師
- Java實驗——基於GUI的網路通訊程式設計JavaGUI程式設計
- java多執行緒程式設計問題以及解決辦法Java執行緒程式設計
- 【解決方案】Java 網際網路專案中訊息通知系統的設計與實現(下)Java
- 【解決方案】Java 網際網路專案中訊息通知系統的設計與實現(上)Java
- 從實際問題看 SwiftUI 和 Combine 程式設計SwiftUI程式設計
- 工程中實際問題解決兩例——基於C#C#
- 程式設計師面試常問計算機網路問題程式設計師面試計算機網路
- 關於網路硬體配置出現問題,無法上網問題的解決
- Java併發程式設計-解決可見性與有序性問題Java程式設計
- java併發程式設計 --併發問題的根源及主要解決方法Java程式設計
- 解決問題的能力 > 10倍程式設計師程式設計師
- 用邏輯迴歸模型解決網際網路金融信用風險問題邏輯迴歸模型
- 幽默:程式設計中困難的不是解決問題,而是確定要解決的問題 - Paul程式設計
- 使用ABAP併發程式設計解決一個實際應用場景中的效能瓶頸問題程式設計
- Python爬蟲程式設計常見問題解決方法Python爬蟲程式設計
- 消除假確定性並解決實際問題
- 程式設計謎題:提升你解決問題的訓練場程式設計
- 有助於改善效能的Java程式碼技巧Java
- 架構設計模式主要用於解決什麼問題?架構設計模式
- Java:基於TCP協議網路socket程式設計(實現C/S通訊)JavaTCP協議程式設計
- 【工業網際網路】工業網際網路平臺建設的四個基本問題
- 解決Mac無法共享網路問題Mac
- Laradock 網路問題不能下載解決
- Java程式設計之道:巧妙解決Excel公式迭代計算難題Java程式設計Excel公式
- 一線網際網路常見的14個Java面試題,你顫抖了嗎程式設計師Java面試題程式設計師
- 程式設計師如何實現“網際網路+”07-如何提高網站流量程式設計師網站
- Java網路程式設計和NIO詳解9:基於NIO的網路程式設計框架NettyJava程式設計框架Netty
- YouCode:更快地解決程式設計問題的vscode外掛程式設計VSCode
- 解決程式設計難題的實用方法指南 - praeclarum程式設計
- 程式設計師如何實現“網際網路+”10-如何分析網站資料程式設計師網站
- 深入分析網路通訊,Wireshark助你解決網路問題!
- linux配置靜態路由解決網路問題Linux路由
- 【譯】Googler如何解決程式設計問題Go程式設計
- JAVA | Java 解決跨域問題Java跨域
- 基於java的網路招聘系統的設計與實現Java
- 以太坊社群意外解決了網際網路的一個重大問題:單點登入