Java高級(六)Java網絡編程
1.理解網絡相關概念
1.有那些大的局域網?(fq)
萬維網 因特網
內網 局域網
網絡可以傳輸資料 共享資料 交流通信
IP(Internet protocol)地址(計算機的身份證號,臨時唯一的)
交換機
網站:IP靜態的, 唯一的
IPV4
IPV6
Dos命令 :ipconfig,查看windows系統的IP地址
Linux: ifconfig,查看Linux系統的IP地址
測試網絡連通:ping(死亡之ping)
公網的端口號:80
2.我們知道可以通過Ip地址:端口號的方式訪問某個計算機上某個程序 那麼我們爲什麼平時訪問網站(程序)的時候沒有輸入ip地址
www.baidu.com 域名解析系統,通過DNS域名解析系統 映射到計算機的Ip地址,NDS 域名解析系統
com 商業網站
cn 中國的網站
org 非盈利組織
gov 政府機構
edu 教育機構
3.訪問百度的時候:
百度 域名/百度ip:端口號
運行這個百度程序的計算機就是服務器
服務器:給用戶提供服務的機器
網絡服務器: 配置需要足夠高! 就是一個高配置 專門運行企業軟件相關的計算機。
4.使用基於TCP協議的Socket(套接字)編程
TCP 三次握手
第一次
第一次握手:建立連接時,客戶端包到服務器,並進入SYN_SENT狀態,等待服務器確認;SYN:同步序列編號(Synchronize Sequence Numbers)。
第二次
第二次握手:服務器收到syn包,必須確認客戶的SYN,同時自己也發送一個SYN包,即SYN+ACK包,此時服務器進入SYN_RECV狀態
第三次
第三次握手:[客戶端]收到[服務器的SYN+ACK包,向[服務器發送確認包ACK,此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP連接成功)狀態,完成三次握手。
完成三次握手,客戶端與服務器開始傳送數據
5.使用基於UDP協議的Socket編程
Java網絡編程
網絡概述:相互連接的計算機
IP地址: 計算機在網絡中地址的表示 網絡地址+主機地址32位,由4個8位二進制數組成,二進制不好記(0-1),轉化爲十進制(0-9)
網絡地址:標識計算機或網絡設備所在的網段
主機地址:標識特定主機或網絡設備 192.168.1.225 網絡地址 主機地址
A類IP地址:第一個數爲1-126 前8位 後24位
B類IP地址:第一個數爲128-191 前16位 後16位
C類IP地址:第一個數爲192-223 前24位 後8位
D類IP地址:第一個數爲224-239 用於組播通信
E類IP地址:第一個數爲240-225 用於科研
0.0.0.0 表示本機
127.0.0.1 表示本機迴環地址,通常用在本機上ping此地址來檢查TCP/IP協議安裝是否正確
255.255.255.255:表示當前子網,一般用於向當前子網廣播信息
網絡的分類:局域網 城域網 廣域網
協議:爲了在網絡中不同計算機之間進行通信而建立的規則,標準或約定的集合
網絡分層模型:
ISO參考模型 | 作用 | TCP/IP模型(TCP傳輸控制協議IP網絡互連協議) |
---|---|---|
物理層 | 建立,維護,斷開物理連接 | 物理層 由底層網絡定義協議 |
數據鏈路層 | 建立邏輯連接,進行硬件地址尋址,差錯效驗等功能 | 網絡接口層 |
網絡層 | 進行邏輯地址尋址,實現不同網絡之間的路徑選擇 | 互聯網層 ICMP IGMP IP ARP RSRP |
傳輸層 | 定義傳輸數據的協議端口號,流量控制和差錯恢復 | 傳輸層 TCP UDP |
會話層 | 建立,管理和終止會話 | |
表示層 | 數據的表示,安全,和壓縮 | |
應用層 | 網絡服務和最終用戶的接口 | 應用層 HTTP FTP TFTP SMTP |
ipconfig 查看本機的ip地址
ping 測試網絡是否通暢
網絡服務器:具有較高計算能力的計算機
1.郵件服務器:負責電子郵件收發管理的設備
2.web服務器:程序 Apache Tomcat http:\協議 開源 輕巧 免費
B/S 瀏覽器訪問,隱形升級 更注重於B/S開發
C/S QQ下載安裝客戶端 , 更新安裝包
Socket簡介(插孔插座)
什麼是Socket?(套接字)
提供給應用程序的接口
Socket分類 java.net
流式套接字(SOCK_STREAM) 【數據安全 TCP】
面向連接、可靠的數據傳輸服務
數據報式套接字(SOCK_DGRAM) 【高效,數據不安全 UDP】
無連接服務,需要(IP,端口號) 請求 (方法監聽請求)
A--------------------->---------------B
輸入流 | 輸出流 |
---|---|
Socket,ServerSocket accept();監聽方法 | |
服務器端:創建ServerSocket對象 | 客戶端:Socket() 發送IP地址,端口輸出流 |
accept()方法監聽電話 輸入流 |
服務器:
while(true){ //服務器一直處於監聽狀態
SocketServer socketserver=new SocketServer(5000); //端口號,服務器搜索客戶端的Socket對象
Socket socket=socketserver.accept(); //接收客戶端的Socket對象
MyThread thread=new MyThread(socket);//使用線程的構造方法將客戶端傳過來的Socket對象返回
thread.start();//啓動線程
}
/*線程:(用繼承Thread類的方式來寫線程)*/
public class MyThread extends Thread{
private Socket socket;//定義一個空線程
public MyThread(Socket socket){//帶有參數的構造方法,參數是一個線程
this.socket=socket;
}
public void run(){ //run方法,啓動線程是,就調用了run()方法
輸入流
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String info;
while((info=br.readLine())!=null){
System.out.print(info);
}
//獲取客戶端的ip地址
InetAddress ia=socket.getInetAddress();
String ip=ia.getHostAddress;
System.out.print(ip);
String str="登錄成功";
//輸出流
OutputStream os=socket.getOutputStream();
os.write(str.getBytes());
os.flush();
}
}
客戶端:
Socket socket=new Socket("服務器Ip地址",端口號);
OutputStream os=socket.getOutputStream();
os.write(str);
socket.shutdownOutput();
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String info;
while((info=br.readLine())!=null){
System.out.print(info);
}
多個客戶端與服務器進行交互
服務器:一直監聽客戶請求,
一旦聽到客戶請求,立刻創建一個線程,開啓線程
線程:(用繼承Thread類的方式來寫線程)
接收客戶的請求,並給客戶一個響應
客戶端:發送請求到服務器
接收服務器的響應
如何獲得客戶端IP地址
InetAddress ia=socket.getInetAddress();
String ip=ia.getHostAddress();
基於UDP協議的Socket編程
服務端與客戶端的通信 | TCP | UDP |
---|---|---|
是否連接 | 面向連接 | 面向非連接 |
傳輸可靠性 | 可靠 | 不可靠 |
速度 | 慢 | 塊 |
DatagramSocket
DatagramPacket
禮物 --數據(字符串)
包裹 --DatagramPacket
快遞點–DatagramSocket
寄禮物 --send()
收禮物 --receive()
獲取IP地址的方式
InetAddress ia=InetAddress.getByName("localhost");
//DatagramPacket(字符串數組,字符串數組長度,IP地址,端口)的構造方法四個參數
DatagramSocket socket=new DatagramSocket();
socket.send(/*DatagramPacket類型的參數*/);
socket.receive(/*DatagramPacket類型的參數*/);
String str=new String (/*數組,開始位置,數組長度*/);
簡述域名解析原理
在瀏覽器中輸入域名www.taobao.com,主機在向www.taobao.com發出請求之前要先知道他的IP地址。主機會調用域名解析程序,向設定的DNS服務器發送信息,請求獲得www.taobao.com的IP地址,如果本地DNS沒有儲存相應的信息,他會發送信息到跟DNS服務器獲得.comDNS服務器的IP,然後向.comDNS服務器發送查詢請求獲得taobao.comDNS服務器的IP地址,最終獲得www.taobao.com的IP地址