1. 程式人生 > >java基礎之網絡編程

java基礎之網絡編程

定位 編程 down 升級 stream 失敗 net null 電話

1. 網絡:不同的區域的計算器連接到一起就是網絡,含局域網 城域網 互聯網等

地址:ip地址,確定網絡上的一個絕對的位置,端口號:用於區分計算機上的軟件的。

資源需要進來所以出現了uri ,url其中UrL表示統一資源定位符,Uri 表示統一資源

url是uri的升級版多了一個定位

2. Tcp協議和udp協議

Tcp:先連接後接通 類似於打電話,說一次回應一次,面向連接,效率低下

Udp:協議,短信方式,非面向連接

3. 端口:1~65535之間 ,一般不建議使用1024以下的端口,因為多為被占用的端口

4. 緩存;dns查找的開銷是非常大的,所以inetaddress類會緩存相應的結果,所以一旦得到結果那麽就不會再次查找,在某些情況下,第一次查找失敗,而第二次卻查找成功是因為,第一次的時候信息還在傳輸中,第二個請求時可用,因為對於補充的dns查詢只緩存10秒,一次ip地址的改變可能需要花幾個小時,在此期間會有各種異常,主機名一般比ip地址穩定一些,所以一般會選擇主機名,在主機名找不到的時候才會選擇ip地址。

5. inetaddress :沒有公共的構造方法,但有一些靜態工廠方法來連接dns服務器來解析主機名,其中常用的有inetaddress.getbyname()以及inetaddress.getlocalhost();

inetaddress的常用方法:

getHostAddress():獲取ip地址

getHostName():獲取主機名

uri:標識一個資源的字符串

url:標識一個資源加位置

常用方法

openConnection()

openStream()

例如https://hao.360.cn/?src=lm&ls=n31c42a959f

getFile()獲取此 URL 的目錄路徑加查詢字符串 主機名後的第一個/和標識符#之間,沒有就從主機名後的第一個/到最後 ?src=lm&ls=n31c42a959f

getPort()獲取此 URL 的端口號,沒有就返回-1;

getPath() 獲取此 URL 的目錄路徑。/

getProtocol()獲取此 URL 的協議名稱。https

getHost()獲取此 URL 的主機名。hao.360.cn

getRef():url的片段標識符#後面的,沒有返回null;

getQuery():返回查詢字符串src=lm&ls=n31c42a959f

url上應該避免使用equals方法因為可能是阻塞的i/o操作

get通信:名值對,不安全會顯示

get/index.html ?account=dasdsa&password=dsadsadsad http/1.1:為請求行,get為返回資源的一個表示,/index.html請求資源的路徑,http//1.1為協議的版本 ?後面為鍵值對,

Host: 127.0.0.1:8888:端口號;

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 :可以處理的文本類型

Connection: keep-alive:保持連接

6. Urlconnection

Getcontentype():獲取響應主體的內容類型

Getconnectlength():獲取內容的字節數,沒有返回-1;

getOutputStream();返回輸出流

7. socket

Socket(InetAddress address, int port):開啟socket;

setSoTimeout(int timeout):設置超時時間;

getOutputStream():請求輸出流

close():關閉輸入輸出

shutdownInput():關閉輸入,不釋放socket占用的資源

shutdownOutput():關閉輸出,不釋放socket占用的資源

getPort():獲取遠程端口

getKeepAlive():是否開啟連接

8. seversocket

ServerSocket(int port):創建serversocket對象

accept():監聽連接和處理連接是可能拋出的異常,返回一個socket對象

DatagramSocket

DatagramSocket():用於client端

DatagramSocket(int port):用於server端

send(DatagramPacket p):用於client端

receive(DatagramPacket p):用於server端

setSoTimeout(int timeout):連接超時時間

9. DatagramPacket

DatagramPacket(byte[] buf,int length,InetAddress address,int port):用於client端,打包數據

getData():獲得緩沖區數據,返回一個字節數組,後面一般會利用getLength()

getLength():getdata()中有效長度

詳見:o’Reilly網絡編程

java基礎之網絡編程