1.軟件架構(gòu)
①
C/S
:客戶端/服務(wù)器
在用戶本地需要下載安裝客戶端程序,在遠程有一個服務(wù)器端程序。
- 優(yōu)點:畫面精美,用戶體驗好
- 缺點:用戶需要下載更新
②
B/S
:瀏覽器/服務(wù)器
只需要一個瀏覽器,用戶通過指定網(wǎng)址訪問對應(yīng)的服務(wù)器。
- 優(yōu)點:不需要開發(fā)客戶端,只需要頁面+服務(wù)端,
用戶不需要下載,打開瀏覽器就能使用- 缺點:如果應(yīng)用過大,用戶體驗收到影響
2.網(wǎng)絡(luò)編程三要素
IP,端口號,網(wǎng)絡(luò)協(xié)議
。
①IP:設(shè)備在網(wǎng)絡(luò)中的地址,是唯一的標(biāo)識
全稱:Internet Protocol
,是互聯(lián)網(wǎng)協(xié)議地址,也稱IP地址
是分配給上網(wǎng)設(shè)備的數(shù)字標(biāo)簽。
②端口號:應(yīng)用程序在設(shè)備中唯一的標(biāo)識
③協(xié)議:數(shù)據(jù)在網(wǎng)絡(luò)傳輸中的規(guī)則,常見的協(xié)議有:UDP、TCP、HTTP、HTTPS、FTP
3.IP
1.IPV4
①全稱:
Internet Protocol version 4
,互聯(lián)網(wǎng)通信協(xié)議第四版
采用32位
地址長度,分成4組
使用點分十進制
表示
②IPV4的
地址分類形式
:
公網(wǎng)地址
(萬維網(wǎng)使用)和私有地址
(局域網(wǎng)使用)。- 192.168.開頭的就是私有址址,范圍即為192.168.0.0–192.168.255.255,專門為組織機構(gòu)內(nèi)部使用,以此節(jié)省IP
③特殊ip地址:
本地回環(huán)地址
:127.0.0.1
或者localhost,表示本機ip。
④Windows的CMD命令:
ipconfig
:查看本機IP地址ping
:檢查網(wǎng)絡(luò)是否連通
2.IPV6
全稱:
Internet Protocolversion 6
,互聯(lián)網(wǎng)通信協(xié)議第六版
由于互聯(lián)網(wǎng)的蓬勃發(fā)展,IP地址的需求量愈來愈大,而IPV4的模式下IP的總數(shù)是有限的
采用128位
地址長度,分成8組。
使用冒分十六進制
表示,特殊情況使用0位壓縮表示
法。
//獲取InetAddress的對象
InetAddress address = InetAddress.getByName("127.0.0.1");
4.端口號
應(yīng)用程序在設(shè)備中唯一的標(biāo)識。
端口號:由兩個字節(jié)
表示的整數(shù),取值范圍:0~65535
其中0~1023之間的端口號用于一些知名的網(wǎng)絡(luò)服務(wù)或者應(yīng)用
我們自己使用1024以上的端口號就可以了
注:一個端口號只能被一個應(yīng)用程序使用。
5.協(xié)議
計算機網(wǎng)絡(luò)中,連接和通信的規(guī)則被稱為網(wǎng)絡(luò)通信協(xié)議
OSI參考模型
:世界互聯(lián)協(xié)議標(biāo)準(zhǔn),全球通信規(guī)范,單模型過于理想化,未能在因特網(wǎng)上進行廣泛推廣。TCP/IP參考模型
(或TCP/IP協(xié)議): 事實上的國際標(biāo)準(zhǔn)。
1.UDP協(xié)議
- 用戶數(shù)據(jù)報協(xié)議(User Datagram Protocol)
- UDP是
面向無連接
通信協(xié)議。速度快
,有大小限制一次最多發(fā)送64K,數(shù)據(jù)不安全
,易丟失數(shù)據(jù).
UDP協(xié)議發(fā)送數(shù)據(jù):
public class Send{
public static void main(String[] args) throws IOException {
//創(chuàng)建DatagramSocket對象
DatagramSocket ds = new DatagramSocket();
//打包數(shù)據(jù)
String str = "你好??!";
byte[] bytes = str.getBytes();
InetAddress address = InetAddress.getByName("127.0.0.1");
int port = 10006;
DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);
//發(fā)送數(shù)據(jù)
ds.send(dp);
//釋放資源
ds.close();
}
}
UDP協(xié)議接收數(shù)據(jù):
public class Receive{
public static void main(String[] args) throws IOException {
//創(chuàng)建DatagramSocket對象:接收時綁定的端口號要與發(fā)送時的端口保持一致
DatagramSocket ds = new DatagramSocket(10086);
//接收數(shù)據(jù)包
byte[] bytes = new byte[1024];
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
ds.receive(dp);
//解析數(shù)據(jù)包
byte[] data = dp.getData();
int length = dp.getLength();
InetAddress address = dp.getAddress();
int port = dp.getPort();
System.out.println("接收到數(shù)據(jù):" + new String(data, 0, length));
System.out.println("該數(shù)據(jù)是從" + address + "這臺電腦中的" + port + "這個端口號發(fā)出的");
//釋放資源
ds.close();
}
}
UDP的三種通信方式:
單播,組播,廣播
1.單播
單播是一種UDP通信的方式,其中一臺發(fā)送方的計算機向一臺接收方的計算機發(fā)送數(shù)據(jù)包。
在單播通信中,發(fā)送方和接收方之間是一對一的關(guān)系
,數(shù)據(jù)包只會發(fā)送到指定的接收方。
單播通信適用于點對點通信或單個目標(biāo)的廣播通信。
2.組播
組播是一種UDP通信的方式,其中
一臺發(fā)送方的計算機可以同時向多個接收方
的計算機發(fā)送數(shù)據(jù)包。
在組播通信中,發(fā)送方將數(shù)據(jù)包發(fā)送到一個特定的組播IP地址,而不是單獨的目標(biāo)IP地址。
所有加入該組播組的接收方都可以接收到發(fā)送方發(fā)送的數(shù)據(jù)包。
組播通信適用于需要同時向多個接收方傳輸相同數(shù)據(jù)的場景,如視頻會議、多媒體廣播等。
使用組播可以有效地減少網(wǎng)絡(luò)帶寬的消耗和系統(tǒng)負載
。
組播地址:224.0.0.0 ~ 239.255.255.255
其中224.0.0.0 ~ 224.0.0.255
為預(yù)留的組播地址
3.廣播
在UDP通信中,廣播是一種發(fā)送方向局域網(wǎng)中的
所有計算機發(fā)送數(shù)據(jù)包
的方式。
發(fā)送方將數(shù)據(jù)包發(fā)送到廣播IP地址,該IP地址被定義為特定的網(wǎng)絡(luò)地址(255.255.255.255
),表示發(fā)送給整個局域網(wǎng)內(nèi)的所有計算機。
使用廣播通信,發(fā)送方可以將數(shù)據(jù)包一次性發(fā)送給所有計算機,而無需指定單獨的目標(biāo)IP地址。
所有接收方都可以接收到發(fā)送方發(fā)送的數(shù)據(jù)包。
廣播通信通常用于向局域網(wǎng)內(nèi)的所有設(shè)備廣播信息,例如在局域網(wǎng)內(nèi)發(fā)現(xiàn)其他設(shè)備或進行網(wǎng)絡(luò)設(shè)備配置。
2.TCP協(xié)議
- 傳輸控制協(xié)議TCP(Transmission Control Protocol)
- TCP協(xié)議是
面向連接
的通信協(xié)議。速度慢
,沒有大小限制,數(shù)據(jù)安全
。
TCP通信協(xié)議是一種可靠的網(wǎng)絡(luò)協(xié)議,它在通信的兩端各建立一個Socket對象
通信之前要保證連接已經(jīng)建立
通過Socket產(chǎn)生IO流來進行網(wǎng)絡(luò)通信
客戶端發(fā)送數(shù)據(jù):
public class Client {
public static void main(String[] args) throws IOException {
//發(fā)送數(shù)據(jù)
//創(chuàng)建Socket對象
Socket socket = new Socket("127.0.0.1", 10001);
//從連接通道中獲取輸出流
OutputStream os = socket.getOutputStream();
//寫出數(shù)據(jù)
os.write("你好".getBytes());
//釋放資源
os.close();
socket.close();
}
}
服務(wù)器接收數(shù)據(jù):
public class Server {
public static void main(String[] args) throws IOException {
//接收數(shù)據(jù)
//
ServerSocket ss = new ServerSocket(10001);
//監(jiān)聽用戶的連接
Socket socket = ss.accept();
//從連接通道中獲取輸入流數(shù)據(jù)
InputStream is = socket.getInputStream();
//解決中文亂碼
InputStreamReader isr = new InputStreamReader(is);
//使用緩沖流提高讀取效率
BufferedReader br = new BufferedReader(isr);
int b;
while ((b = br.read()) != -1) {
System.out.println((char) b);
}
//釋放資源
socket.close();
ss.close();
}
}
1.三次握手
確保連接建立:
①客戶端向服務(wù)器發(fā)出連接請求
,等待服務(wù)器確認。
②服務(wù)器向客戶端返回一個響應(yīng)
,告訴客戶端收到了請求。
③客戶端向服務(wù)器再次發(fā)出確認
信息,連接建立。文章來源:http://www.zghlxwxcb.cn/news/detail-778329.html
2.四次揮手
確保連接斷開,且數(shù)據(jù)處理完畢:
①客戶端向服務(wù)器發(fā)出取消連接請求
②服務(wù)器向客戶端返回一個響應(yīng),表示收到客戶端取消請求
③服務(wù)器將最后的數(shù)據(jù)處理完畢,服務(wù)器向客戶端發(fā)出確認取消信息
④客戶端再次發(fā)送確認
消息,連接取消文章來源地址http://www.zghlxwxcb.cn/news/detail-778329.html
到了這里,關(guān)于Java網(wǎng)絡(luò)編程之IP,端口號,通信協(xié)議(UDP,TCP)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!