你們好,我是樂字節小樂,上次給你們講述了Java中的IO流之輸出流|樂字節,本文將會給你們講述網絡編程。html
主要內容以下:數據庫
網絡即將不一樣區域的電腦鏈接到一塊兒, 組成局域網、城域網或廣域網。把分佈在不一樣地理區域的計算機與專門的外部設備用通訊線路互連成一個規模大、功能強的網絡系統,從而使衆多的計算機能夠方便地互相傳遞信息,共享硬件、軟件、數據信息等資源。編程
• 資源共享
• 信息傳輸與集中處理
• 均衡負荷與分佈處理數組
計算機網絡中實現通訊必須有一些約定即通訊協議,對速率、傳輸代碼、代碼結構、傳安全
輸控制步驟、出錯控制等制定標準。服務器
爲了使兩個結點之間能進行對話,必須在它們之間創建通訊工具(即接口),使彼此之間能進行信息交換。接口包括兩部分:網絡
• 硬件裝置: 實現結點之間的信息傳送;
• 軟件裝置: 規定雙方進行通訊的約定協議app
因爲結點之間聯繫很複雜,在制定協議時,把複雜成份分解成 一些簡單的成份,再將它們複合起來。最經常使用的複合方式是層次方式,即同層間能夠通訊、上一層能夠調用下一層,而與再下一層不發生關係。socket
封裝:從上往下,加入相關層的協議控制信息tcp
拆封:獲取數據,從下往上,去除相關層的協議的控制信息
( IP) 是 Internet Protocol 的外語縮寫, 網絡之間互連的協議也就是爲計算機網絡相互鏈接進行通訊而設計的協議。 在因特網中,它是能使鏈接到網上的全部計算機網絡實現相互通訊的一套規則,規定了計算機在因特網上進行通訊時應當遵照的規則。任何廠家生產的計算機系統,只要遵照 IP 協議就能夠與因特網互連互通。
端口:區分數據流向的軟件 0-65535 不要使用 1024 如下的端口 ,每個協議擁有本身的端口,在同一個協議下端口不能重複 FTP:21 HTTP:80
端口是虛擬的概念,並非說在主機上真的有若干個端口。經過端口,能夠在一個主機上運行多個網絡應用程序。能夠類比爲:IP 至關於公司,端口至關於公司各部門,URL,至關於各部門的人員。
TCP:TCP(transfer control protocol) 打電話 面向鏈接、安全、可靠,效率低
UDP:UDP(UserDatagramProtocol ) 發送短信 非面向鏈接、不安全、數據可能丟失 、效率高
封裝計算機的 ip 地址和 DNS( Domain Name System,域名系統) ,沒有端口。
1)、方法
InetAddress.getLocalHost();
InetAddress.getByName("http://www.163.com");
InetAddress.getByName("223.87.1.58")
2) 、方法
getHostAddress() 返回 ip 地址
getHostName() 返回域名|本機爲計算機名
包含端口,用於 socket 通訊的
1) 、獲取對象
InetSocketAddress(String hostname, int port)
InetSocketAddress(InetAddress addr, int port)
2) 、方法
getAddress() 返回 InetAddress 對象
getPort() 返回端口
getHostName() 返回域名
1) 、URI(Uniform resource identifier)
統一資源標識符, 用來惟一的標識一個資源。
2) 、URL( Uniform Resource Locator)
統一資源定位器,它是一種具體的 URI 。統一資源定位符,由 4 部分組成:協議 、存
放資源的主機域名、資源文件名和端口號。 URL是指向互聯網「資源」的指針。資源能夠是簡單的文件或目錄,也能夠是對更爲複雜的對象的引用,例如對數據庫或搜索引擎的查詢。
3) 、網絡爬蟲原理
public static void main(String[] args) throws IOException { URL url=new URL("http://www.baidu.com");//主頁 默認資源 //獲取資源 網絡流 可能會出現亂碼:一、字節數不夠 二、編碼解碼格式不統一 /*InputStream is=url.openStream(); byte[]flush=new byte[1024]; int len=0; while(-1!=(len=is.read(flush))){ System.out.println(new String(flush,0,len)); } is.close();*/ BufferedReader br=new BufferedReader(new InputStreamReader(url.openStream(),"utf-8")); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("baidu2.html"),"utf-8")); String msg=null; while((msg=br.readLine())!=null){ //將網絡內容下載到本地。而後進行數據分析,創建索引,這也是搜索引擎的第一步。 bw.append(msg); bw.newLine();//新增方法 插入換行符 } bw.flush();//強制刷出 bw.close(); br.close();}
UserDatagramProtocol,一種無鏈接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務。其特色爲:非面向鏈接;傳輸不可靠;數據可能丟失。
1)、服務器:
①建立服務器 DatagramSocket類 +指定端口
②準備接收容器 字節數組 +封裝成DatagramPacket數據包
③接收數據
④分析數據
⑤釋放資源
2)、客戶端:
①建立客戶端 DatagramSocket類 +指定端口
②準備數據 字節數組
③封裝成數據包 須要指定包發送的地址+端口 即服務器地與端口
④發送數據
⑤釋放資源
transfer control protocol,一種面向鏈接(鏈接導向)的、可靠的、基於字節流的傳輸層(Transport layer)通訊協議的點到點的通訊 。TCP 三次握手(Three-way Handshake),相似於撥打電話
1) 、特色
基於 tcp 協議,創建穩定鏈接的點對點的通訊;實時、快速、安全性高、佔用系統資源多、效率低;「請求-響應」模式:
a)、客戶端:在網絡通信中,第一次主動發起通信的程序被稱做客戶端(Client)程序
b)、服務器:第一次通信中等待鏈接的程序被稱做服務器端(Server)程序
• Socket:發送 TCP 消息
• ServerSocket:建立服務器
套接字是一種進程間的數據交換機制。這些進程既能夠在同一機器上,也能夠在經過網
絡鏈接的不一樣機器上。換句話說,套接字起到通訊端點的做用。單個套接字是一個端點,
而一對套接字則構成一個雙向通訊信道,使非關聯進程能夠在本地或經過網絡進行數據
交換。一旦創建套接字鏈接,數據便可在相同或不一樣的系統中雙向或單向發送,直到其
中一個端點關閉鏈接
2) 、服務器:
①建立服務器 指定端口
②等待客戶端鏈接
③分析接收數據
3) 、客戶端:
①鏈接服務器: 建立客戶端 +指定服務器地址 +端口
②發送數據
樂字節原創,轉載請註明出處。
關於網絡編程就講到這裏了,更多Java乾貨請繼續關注樂字節。