网络——连接到server
生活随笔
收集整理的這篇文章主要介紹了
网络——连接到server
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【0】README
0.1) 本文描述部分轉自 core java volume 2 , 旨在理解 網絡——連接到server 的基礎知識 ;
0.2) for source code, please visit https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/chapter3/SocketTest.java + https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/chapter3/InetAddressTest.java ;
【1】連接到服務器相關
1)首先了解 telnet 這個工具,調試網絡程序非常有幫助;
- 1.1)telnet 簡介: Telnet是進行遠程登錄的標準協議和主要方式,它為用戶提供了在本地計算機上完成遠程主機工作的能力。可以用telnet命令來測試端口號是否正常打開還是關閉狀態。
- 1.2)Telnet 客戶端命常用命令:
- open : 使用 openhostname 可以建立到主機的 Telnet 連接。
- close : 使用命令 close 命令可以關閉現有的 Telnet 連接。
- display : 使用 display 命令可以查看 Telnet 客戶端的當前設置。
- send : 使用 send 命令可以向 Telnet 服務器發送命令。支持以下命令:
- ao : 放棄輸出命令。
- ayt : “Are you there”命令。
- esc : 發送當前的轉義字符。
- ip : 中斷進程命令。
- synch : 執行 Telnet 同步操作。
- brk : 發送信號。
上表所列命令以外的其他命令都將以字符串的形式發送至 Telnet 服務器。例如,sendabcd 將發送字符串 abcd 至 Telnet 服務器,這樣,Telnet 會話窗口中將出現該字符串。 - quit : 使用 quit 命令可以退出 Telnet 客戶端。
- 1.3)運行在遠程計算機上的服務器軟件不停等待那些希望與端口13 連接的網絡請求。 一旦建立連接, 遠程程序便發送回一行數據, 然后關閉該連接。
對上述代碼的分析(Analysis):
- A1)第一行打開一個套接字。它也是網絡軟件(如 telnet 提供本地計算機操作遠程計算機的功能)中的一個抽象概念, 負責啟動該程序內部和外部之間的通信;(干貨——套接字的抽象概念的具體含義是網絡軟件,如telnet, 而telnet又是進行遠程登錄的標準協議和主要方式)
- A2)一旦套接字被打開: java.net.Socket 類中的getInputStream 方法就會返回一個 InputStream 對象,該對象可以像其他任何流對象一樣使用;
【2】套接字超時
1)problem+solution
- 1.1)problem:從套接字讀取信息時, 在有數據可供訪問之前, 讀操作將會被阻塞;
- 1.2)solution:對于不同的應用,應該確定合理的超時值,然后調用 setSoTimeout 方法設置這個超時值, 如:
2)捕獲SocketTimeoutException 異常:如果設置了超時, 并且之后的讀操作和寫操作在沒有完成之前就超過了時間限制, 那么這些操作就會拋出 SocketTimeoutException 異常, 你可以捕獲這個異常, 對超時做出反應;
3)另外還有一個超時問題需要解決(problem+solution):
- 3.1)下面這個構造器(problem): Socket(String host, int port) 會一直無限期地阻塞下去, 直到建立了到達主機的初始連接為止;
- 3.2)solution:可以通過先構建一個無連接的套接字,然后再使用一個超時來進行連接的方法解決這個問題: (干貨——使用超時限制來解決Socket構造器可能無限阻塞下去的case)
【3】因特網地址(主機名和因特網地址間的轉換,使用InetAddress 類)
1)靜態的getByName 方法可以返回代表某個主機的 InetAddress 對象, 如:
InetAddress address = InetAddress.getByName("www.baidu.com");- 1.1)然后使用getAddress 方法來訪問這些字節:
- 1.2)getAllByName方法:一些訪問量較大的主機名通常會對應多個因特網地址, 以實現負責均衡。當客戶端訪問主機時, 會隨機選擇其中的一個。 可以通過調用 getAllByName 方法來獲得所有主機: (干貨——訪問量較大的主機名通常會對應多個因特網地址,通過getAllByName方法獲取所有的因特網地址)
- 1.3)可以使用靜態的getLocalHost 方法來得到本地主機的地址:
總結
以上是生活随笔為你收集整理的网络——连接到server的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 祝福歌曲歌词 歌曲祝福完整歌词
- 下一篇: 九点打一字 谜语简介