大家好,我是樂字節小樂,上次給大家講述了Java中的IO流之輸出流|樂字節,本文將會給大家講述網絡編程。
主要內容如下:
- 網絡
- 網絡分層
- IP位置
- 端口port
- 網絡編程

一、 網絡
1、概念
網絡即將不同區域的電腦連接到一起, 組成局域網、城域網或廣域網。把分布在不同地理區域的計算機與專門的外部設備用通信線路互連成一個規模大、功能強的網絡系統,從而使眾多的計算機可以方便地互相傳遞信息,共享硬件、軟件、數據信息等資源。

2、主要功能
? 資源共享
? 信息傳輸與集中處理
? 均衡負荷與分布處理
3、網絡通信協議
計算機網絡中實現通信必須有一些約定即通信協議,對速率、傳輸代碼、代碼結構、傳
輸控制步驟、出錯控制等制定標準。
4、網絡通信接口
為了使兩個結點之間能進行對話,必須在它們之間建立通信工具(即接口),使彼此之間能進行信息交換。接口包括兩部分:
? 硬件裝置: 實現結點之間的信息傳送;
? 軟件裝置: 規定雙方進行通信的約定協議
二、 網絡分層
由于結點之間聯系很復雜,在制定協議時,把復雜成份分解成 一些簡單的成份,再將它們復合起來。最常用的復合方式是層次方式,即同層間可以通信、上一層可以調用下一層,而與再下一層不發生關系。
1、 通信協議的分層

2、封裝
封裝:從上往下,加入相關層的協議控制信息

3、拆封
拆封:獲取數據,從下往上,去除相關層的協議的控制信息

三、 IP位置
( IP) 是 Internet Protocol 的外語縮寫, 網絡之間互連的協議也就是為計算機網絡相互連接進行通信而設計的協議。 在因特網中,它是能使連接到網上的所有計算機網絡實現相互通信的一套規則,規定了計算機在因特網上進行通信時應當遵守的規則。任何廠家生產的計算機系統,只要遵守 IP 協議就可以與因特網互連互通。
端口:區分數據流向的軟件 0-65535 不要使用 1024 以下的端口 ,每一個協議擁有自己的端口,在同一個協議下端口不能重復 FTP:21 HTTP:80
四、端口:port
端口是虛擬的概念,并不是說在主機上真的有若干個端口。通過端口,可以在一個主機上運行多個網絡應用程序。可以類比為:IP 相當于公司,端口相當于公司各部門,URL,相當于各部門的人員。
五、資源的傳輸協議
TCP:TCP(transfer control protocol) 打電話 面向連接、安全、可靠,效率低
UDP:UDP(UserDatagramProtocol ) 發送短信 非面向連接、不安全、數據可能丟失 、效率高
六、網絡編程
1、InetAddress
封裝計算機的 ip 地址和 DNS( Domain Name System,域名系統) ,沒有端口。
1)、方法
InetAddress.getLocalHost();
InetAddress.getByName("http://www.163.com");
InetAddress.getByName("223.87.1.58")
2) 、方法
getHostAddress() 返回 ip 地址
getHostName() 返回域名|本機為計算機名
2、InetSocketAddress
包含端口,用于 socket 通信的
1) 、獲取對象
InetSocketAddress(String hostname, int port)
InetSocketAddress(InetAddress addr, int port)
2) 、方法
getAddress() 返回 InetAddress 對象
getPort() 返回端口
getHostName() 返回域名
3 、URL
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");//主頁 默認資源
//獲取資源 網絡流 可能會出現亂碼:1、字節數不夠 2、編碼解碼格式不統一/*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();}
4、UDP編程: DatagramSocket DatagramPacket
UserDatagramProtocol,一種無連接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務。其特點為:非面向連接;傳輸不可靠;數據可能丟失。

1)、服務器:
①創建服務器 DatagramSocket類 +指定端口
②準備接收容器 字節數組 +封裝成DatagramPacket數據包
③接收數據
④分析數據
⑤釋放資源
2)、客戶端:
①創建客戶端 DatagramSocket類 +指定端口
②準備數據 字節數組
③封裝成數據包 需要指定包發送的地址+端口 即服務器地與端口
④發送數據
⑤釋放資源
5、TCP 編程:ServerSocket Socket
transfer control protocol,一種面向連接(連接導向)的、可靠的、基于字節流的傳輸層(Transport layer)通信協議的點到點的通信 。TCP 三次握手(Three-way Handshake),類似于撥打電話
1) 、特點
基于 tcp 協議,建立穩定連接的點對點的通信;實時、快速、安全性高、占用系統資源多、效率低;“請求-響應”模式:
a)、客戶端:在網絡通訊中,第一次主動發起通訊的程序被稱作客戶端(Client)程序
b)、服務器:第一次通訊中等待連接的程序被稱作服務器端(Server)程序
? Socket:發送 TCP 消息
? ServerSocket:創建服務器
套接字是一種進程間的數據交換機制。這些進程既可以在同一機器上,也可以在通過網
絡連接的不同機器上。換句話說,套接字起到通信端點的作用。單個套接字是一個端點,
而一對套接字則構成一個雙向通信信道,使非關聯進程可以在本地或通過網絡進行數據
交換。一旦建立套接字連接,數據即可在相同或不同的系統中雙向或單向發送,直到其
中一個端點關閉連接
2) 、服務器:
①創建服務器 指定端口
②等待客戶端連接
③分析接收數據
3) 、客戶端:
①連接服務器: 創建客戶端 +指定服務器地址 +端口
②發送數據
樂字節原創,轉載請注明出處。
關于網絡編程就講到這里了,更多Java干貨請繼續關注樂字節。