day39-網路編程01
Java網路編程01
1.網路相關的概念
1.1網路通訊和網路
- 網路通訊
- 概念:兩台設備之間通過網路實現數據傳輸
- 網路通訊:將數據通過網路從一台設備傳輸到另一台設備
- java.net包下提供了一系列的類和介面,供程式設計師使用,完成網路通訊
- 網路
-
概念:兩台或多台設備通過一定物理設備連接起來構成了網路
-
根據網路的覆蓋範圍不同,對網路進行分類:
- 區域網:覆蓋範圍最小,僅僅覆蓋一個教室或者一個機房
- 城域網:覆蓋範圍較大,可以覆蓋一個城市
- 廣域網:覆蓋範圍最大,可以覆蓋全國甚至全球,萬維網是廣域網的代表
1.3ip地址和地址分類
- ip地址
- 概念:用於唯一標識網路中的每台電腦/主機
- 查看ip地址:ipconfig
- ip地址的表示形式:點分十進位 xx.xx.xx.xx
- 每一個十進位數的範圍:0~255
-
ip地址的組成 = 網路地址+主機地址 ,比如:192.168.16.69
-
IPv6是互聯網工程任務組設計的用於替代IPv4的下一代IP協議,其地址數量號稱可以為全世界的每一粒沙子編上一地址。
IPv6使用128位bit(16個位元組)表示地址,相當於IPv4地址長度的4倍
-
由於IPv4最大的問題在於網路地址資源有限,嚴重製約了互聯網的應用和發展。IPv6的使用,不僅能夠解決網路地址資源數量的問題,而且也解決了多種計入設備連入互聯網的障礙
- ipv4地址分類
特殊的:127.0.0.1表示本機地址
1.4域名和埠
- 域名
- 域名的好處:為了方便記憶,解決記憶ip的困難
- 概念:將ip地址映射成域名
- 埠
- 概念:用於標識電腦上某個特定的網路程式
-
表示形式:以整數形式,埠範圍0~65535[2個位元組表示埠 0~2^16-1]
-
0~1024已經被佔用,比如ssh 22,ftp 21,smtp 25,http 80
在網路開發中,不要使用到0~1024的埠
-
常見的網路程式端號:
- tomcat : 8080
- mysql: 3306
- oracle: 1521
- sqlserver: 1433
1.5網路通訊協議
- 簡單的協議理解:
網路協議通俗地講就是網路上兩台電腦之間通訊所要遵守的共同標準。
這麼講還是不夠通俗易懂,所以我們可以打個比方:
有兩個人,一個中國人,一個法國人,如下:
(用英語交流)
中國人------------------------法國人
(講中文) (講法語)
[會英語] [會英語]
<英語協議> <英語協議>
這兩個人要想交流,必須講一門雙方都懂的語言。如果大家都不會講對方的民族語言,那麼可以選擇雙方都懂的第三方的語言來交流,比如「講英語」。那麼這時候「英語」實際上就成為一種「網路協議」。
把網路協議比做通用語言只是一種形象比喻,實際上協議本身比自然語言要簡單的多,但是卻比自然語言更嚴謹。協議規定了一種交流資訊的格式或者說規範,比如:字元「LOVE」表示什麼意思,第2個位元組表示什麼含義等……只要大家都按同樣的規範來表達自己的意思,對方就能「聽懂」你的意思。
同一種「規範」遵守的人多了,就成為一種事實上的「標準」。比如TCP/IP協議就成為了一種最流行的網路協議。
初學者如何理解網路協議? – Tsingke – 部落格園 (cnblogs.com)
-
TCP/IP協議
TCP/IP 是 Transmission Control Protocol/Internet Protocol 的簡寫,中文名譯為 傳輸控制協議/網際網路互聯協議,又叫網路通訊協議,這個協議是Internet最基本的協議、Internet國際互聯網路的基礎。簡單的說,就是由網路層的IP協議和傳輸層的TCP協議組成的。
-
數據進入協議棧時的封裝/解封過程:
- 網路通訊協議:
注意:傳輸層雖然叫TCP層,但是並不只有TCP一個協議,只是因為TCP用的最多,網路層同理
在現實中真正使用的是TCP/IP模型,這四層對應上面的協議封裝/解封過程
1.6TCP和UDP
- TCP協議:傳輸控制協議
- 使用TCP協議前,需先建立TCP連接,形成傳輸數據通道
- 傳輸前,採用「三次握手」方式,是可靠的
- TCP協議進行通訊的兩個應用進程:客戶端、服務端
- 在連接中可進行大數據量的傳輸
- 傳輸完畢,需釋放已經建立的連接,效率低
三次握手的目的是建立可靠的通訊通道,說到通訊,簡單來說就是數據的發生與接收,而三次握手最主要的目的就是雙方確認自己與對方的發送與接收是否正常
- UDP協議:用戶數據協議
- 將數據、源、目的封裝成數據包,不需要建立連接
- 每個數據報的大小限制在64k內,不適合傳輸大量數據
- 應無需連接,故是不可靠的
- 發送數據結束時,無需釋放資源(因為不是面向連接的),速度快
- 舉例:類似於學校廣播通知,不能確定你個人是否聽到了
2.InetAddress類
- 相關方法:
- getLocalHost :獲取本機的InetAddress對象
- getByName:根據指定主機名/域名 獲取ip地址對象
- getHostName:通過 InetAddress 對象,獲取相應的主機名
- getHostAddress:通過 InetAddress 對象,獲取相應的地址
例子:
package li.network;
import java.net.InetAddress;
import java.net.UnknownHostException;
//演示 InetAddress 類的使用
public class API_ {
public static void main(String[] args) throws UnknownHostException {
// 1.getLocalHost:獲取本機的 InetAddress 對象
InetAddress localHost = InetAddress.getLocalHost();
System.out.println(localHost);//LAPTOP-32SOPQVL/192.168.237.1
//getByName
// 2.1 :根據指定的主機名,獲取 InetAddress對象
InetAddress host1 = InetAddress.getByName("LAPTOP-32SOPQVL");
System.out.println("host1="+host1);//host1=LAPTOP-32SOPQVL/192.168.237.1
// 2.2 根據域名 獲取ip地址對象 example:www.baidu.com
InetAddress host2 = InetAddress.getByName("www.basidu.com");
System.out.println("host2="+host2);//host2=www.basidu.com/8.210.41.100
// 3.getHostAddress:通過InetAddress對象,獲取相應的地址
String hostAddress = host2.getHostAddress();//IP地址
System.out.println("host2對應的ip地址="+hostAddress);//host2對應的ip地址=8.210.41.100
// 4.getHostName:通過 InetAddress 對象,獲取對應的主機名或者域名
String hostName = host2.getHostName();
System.out.println("host2對應的主機名/域名="+hostName);//host2對應的主機名/域名=www.basidu.com
}
}
3.Socket
3.1基本介紹
-
套接字(Socket)開發網路應用程式被廣泛採用,以至於成為事實上的標準
-
通訊的兩端都要有Socket,是兩台機器間通訊的端點
-
網路通訊其實就是Socket間的通訊
-
Socket允許程式把網路連接當成一個流,數據在兩個Socket間通過IO傳輸
-
一般主動發起通訊的應用程式屬於客戶端,等待通訊請求的為服務端
客戶端和伺服器端通常情況下,是在不同主機的。但是也有可能在同一台主機上
3.2TCP編程通訊
- 基本介紹
- 基於客戶端–服務端的網路通訊
- 底層使用的是TCP/IP協議
- 應用場景舉例:客戶端發送數據,服務端接收並顯示控制台
- 基於Scoket的TCP編程