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編程
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/508916.html
標籤:Java
上一篇:1 Java記憶體區域管理
下一篇:JAVA設計模式-單例模式
