更多物聯網高併發編程知識請移步:https://www.yuque.com/shizhiy...html
網絡基礎知識(參考計算機網絡)
《TCP/IP協議棧及OSI參考模型詳解》
java
目前世界上應用最爲普遍的協議,是以TCP和IP爲基礎的不一樣層次上多個協議的集合,也成TCP/IP協議族、或TCP/IP協議棧數組
爲實現網絡中不一樣計算機之間的通訊,每臺計算機都必須有一個惟一的標識---IP地址。 32位二進制
網絡
區分一臺主機的多個不一樣應用程序,端口號範圍爲0-65535,其中0-1023位爲系統保留。 併發
如:HTTP:80 FTP:21 Telnet:23
IP地址+端口號組成了所謂的Socket,Socket是網絡上運行的程序之間雙向通訊鏈路的終結點,是TCP和UDP的基礎
高併發
網絡上具備惟一標識的IP地址和端口組合在一塊兒才能構成惟一能識別的標識符套接字。
Socket原理機制:編碼
針對網絡通訊的不一樣層次,Java提供了不一樣的API,其提供的網絡功能有四大類:url
InetAddress類用於標識網絡上的硬件資源,標識互聯網協議(IP)地址。 計算機網絡
//獲取本機的InetAddress實例 InetAddress address =InetAddress.getLocalHost(); address.getHostName();//獲取計算機名 address.getHostAddress();//獲取IP地址 byte[] bytes = address.getAddress();//獲取字節數組形式的IP地址,以點分隔的四部分 //獲取其餘主機的InetAddress實例 InetAddress address2 =InetAddress.getByName("其餘主機名"); InetAddress address3 =InetAddress.getByName("IP地址");
URL(Uniform Resource Locator)統一資源定位符,表示Internet上某一資源的地址,協議名:資源名稱
//建立一個URL的實例 URL baidu =new URL("http://www.baidu.com"); URL url =new URL(baidu,"/index.html?username=tom#test");//?表示參數,#表示錨點 url.getProtocol();//獲取協議 url.getHost();//獲取主機 url.getPort();//若是沒有指定端口號,根據協議不一樣使用默認端口。此時getPort()方法的返回值爲 -1 url.getPath();//獲取文件路徑 url.getFile();//文件名,包括文件路徑+參數 url.getRef();//相對路徑,就是錨點,即#號後面的內容 url.getQuery();//查詢字符串,即參數
經過URL對象的openStream()方法能夠獲得指定資源的輸入流,經過流可以讀取或訪問網頁上的資源
//使用URL讀取網頁內容 //建立一個URL實例 URL url = new URL("http://www.baidu.com"); InputStream is = url.openStream();//經過openStream方法獲取資源的字節輸入流 InputStreamReader isr = newInputStreamReader(is, "UTF-8");//將字節輸入流轉換爲字符輸入流,若是不指定編碼,中文可能會出現亂碼 BufferedReader br = newBufferedReader(isr);//爲字符輸入流添加緩衝,提升讀取效率 String data = br.readLine();//讀取數據 while (data != null) { System.out.println(data);//輸出數據 data = br.readerLine(); } br.close(); isr.colose(); is.close();