建設銀行網(wǎng)站安全性分析什么是seo搜索優(yōu)化
IP地址
域名解析:
本機訪問域名時,會從本地的DNS上解析數(shù)據(jù)(每個電腦都有),如果有,獲取其對應的IP,通過IP訪問服務器。如果本地沒有,會去網(wǎng)絡提供商的DNS找域名對應的IP,找到了就返回。
公網(wǎng)IP:連接互聯(lián)網(wǎng)的IP
內(nèi)網(wǎng)IP:局域網(wǎng)IP
1、網(wǎng)絡通信的基本要素有哪些
2、IP地址是做什么的,具體有幾種
3、如何查看本機ip,如何判斷是否與對方互聯(lián)
4、本地IP是多少
InetAddress
- 萬物皆對象:在java中IP對象就是InetAddress
InetAddress | |
---|---|
public static InetAddress getLocalHost() | 獲取本機IP,會以一個InetAddress對象返回 |
public static InetAddress getByName(String host) | 通過主機名獲取IP對象 |
public String getHostName() | 獲取主機名 |
public String getHostAddress() | 獲取主機地址 |
public boolean isReachable(int timeout) | 判斷是否能在timeout時間內(nèi)連通該IP |
1、IP地址的代表類是誰
2、如何獲取本機IP對象
3、如何判斷與某IP對象是否互通
端口
- 標記正在計算機設備商運行的應用程序,被規(guī)定為16為二進制,范圍為0~65535
ip對應主機,端口對應的是主機上的應用。如:假如微信占用36端口,用微信給張三發(fā)消息,在網(wǎng)絡傳輸過程中,通過ip確定張三的電腦,端口確定張三電腦上的應用,他才能收到。
端口分為:
周知端口(常用的:HTTP是80、FTP是21)、注冊端口(分配給用戶進程)、動態(tài)端口(分配不固定)
自己開發(fā)的程序一般選擇注冊端口
1、端口的作用是什么
2、一個設備中,能否出現(xiàn)兩個端口相同的應用程序,為什么
通信協(xié)議
- 網(wǎng)絡上通信的設配,事先規(guī)定的連接規(guī)則以及傳輸數(shù)據(jù)的規(guī)則,稱之為網(wǎng)絡協(xié)議
開放網(wǎng)絡互聯(lián)標準:OSI網(wǎng)絡參考模型
OSI、TCP/IP
傳輸層的兩個通信協(xié)議
- UDP:用戶數(shù)據(jù)報協(xié)議
- TCP:傳輸控制協(xié)議
UDP協(xié)議
- 特點:無連接;不可靠通信;效率相對高
- 場景:語音通話、視頻直播
- 不事先建立連接,數(shù)據(jù)按照包發(fā),一包數(shù)據(jù)包含:自己的IP、程序端口、目的地IP、程序端口和數(shù)據(jù)等
- 發(fā)送方不關對方是否在線,數(shù)據(jù)發(fā)送對視也不管,如果接收方受到數(shù)據(jù)也不返回確認,是不可靠的。
TCP協(xié)議
- 特點:面向連接;可靠通信;效率相對低
- 場景:網(wǎng)頁、文件下載、支付
- TCP的最終目的:要保證在不可靠的信道上實現(xiàn)可靠的傳輸
- 實現(xiàn)可靠通信的方式:三次握手、進行數(shù)據(jù)確認、四次揮手
三次握手:發(fā)送連接請求;返回響應;再次發(fā)出確認,連接建立。例如開遠程會議:能聽到嗎?可以聽到。 好的那我們開始吧。
-
第一次和第二次握手是為了確認服務器的連接
-
第二次和第三次握手是為了確認客戶端的連接
四次揮手:發(fā)出斷開連接;返回響應:稍等;返回響應:確認斷開;確認正式斷開。如:我走了;等下;帶著橘子路上吃;行,你先去吧
第二次和第三次是服務端的響應
第一次和第四次是客戶端的請求
1、通信協(xié)議是什么
2、UDP協(xié)議、TCP協(xié)議的特點是什么?各自適用于什么場景?
UDP通信
例如抖音上的一個視頻:道路兩旁的兩個人,一邊是廚師,炒完菜將菜從盤子中扔過去,另一邊是服務員,用盤子接收飛過來的菜。
- 廚師就是客戶端,扔菜的socket
- 服務員是服務端,接菜的socket
- 盤子就是就是DatagramPacket()
java提供了一個java.net.DatagramSocket實現(xiàn)UDP通信
public DatagramSocket() | 創(chuàng)建客戶端的socket對象,系統(tǒng)隨機分配一個端口 |
public DatagramSocket(int port) | 創(chuàng)建服務端的socket對象,并指定端口號 |
public void send(DatagramPacket dp) | 發(fā)送數(shù)據(jù)包 |
public void receive(DatagramPacket p) | 使用數(shù)據(jù)包接收數(shù)據(jù),接收的數(shù)據(jù)在數(shù)據(jù)包的byte[]中 |
DatagramPacket 創(chuàng)建數(shù)據(jù)包 | |
public DatagramPacket(byte[] buf, int length, InteAddress, int port) | 參數(shù)1:要發(fā)或收的數(shù)據(jù) 參數(shù)2:要發(fā)或收的數(shù)據(jù)長度 參數(shù)3:服務端的IP地址 參數(shù)4:服務端的端口 |
public DatagramPacket(byte[] buf, int length) | 參數(shù)1:要發(fā)或收的數(shù)據(jù) 參數(shù)2:要發(fā)或收的數(shù)據(jù)長度 |
public int getLength() | 獲取數(shù)據(jù)包,實際接收 |
1、UDP通信的對象是什么
2、如何獲取和發(fā)送數(shù)據(jù)包
3、如何創(chuàng)建數(shù)據(jù)包對象
4、客戶端和服務端先啟動哪個
服務端
5、服務端運行時會在哪個方法中一直等待接收
receive方法
6、如何從接收的數(shù)據(jù)包中獲取ip和port
數(shù)據(jù)包.getAddress().getHostAddress();
數(shù)據(jù)包.getPort();
7、如何關閉socket
socket.close();
TCP通信
1、tcp通信,客戶端的代表類是誰
new socket(IP,端口)
2、如何使用socket管道進行收發(fā)數(shù)據(jù)
socket.getOutputStream();
socket.getInputStream();
3、tcp通信哪個包裝流最好用
DataOutputStream、DataInputStream
1、服務端的代表類是誰
new ServerSocket(端口)
客戶端和服務端都需要socket(插座)相當于兩個渡口
客戶端和服務端分別通過渡口收發(fā)數(shù)據(jù)
客戶端(需要指定服務端ip和端口)
public Socket(String host,int port) 根據(jù)指定的ip、端口請求與服務器建立連接,連接通過就建立了socket(客戶端的socket)
public OutputStream get OutputStream() 獲取輸出流對象
public InputStream get In putStream() 獲取輸入對象
服務端
public ServerSocket(int port) 為服務端注冊端口
public Socket accept() 獲取與客戶端連接的socket(服務端的socket),服務端運行到這里的時候,會一直等待直到客戶端連接上
public OutputStream get OutputStream() 獲取輸出流對象
public InputStream get In putStream() 獲取輸入對象
注意:
1. 客戶端可能使用了包裝流發(fā)送數(shù)據(jù),接收端如果想用包裝流必須使用和客戶端相同的包裝流
2. 記得使用關閉方法關閉流和socket
3. 只要客戶端和服務端連接成功后,客戶端發(fā)數(shù)據(jù)服務端都會收到,如果客戶端發(fā)送的速度很快,也不會丟失數(shù)據(jù)
4. 客戶端如果掛了,服務端如果沒關閉就會產(chǎn)生一個異常? 1、TCP通信服務端用的類是誰
? 2、TCP通信服務端的開發(fā)步驟是什么
服務端一個線程只能對應一個客戶端通信,main方法對應的是一個線程,所以服務端一個main方法只能與一個客戶端通信。如果需要多方通信,就需要開啟多線程。
倉庫
https://gitee.com/gitee_q/network-programming.git