JAVA學習第五十九課 — 網路編程概述,java網路編程概述
網路模型
OSI(Open System Interconnection)開放系統互相連線模型:參考模型
TCP/IP
網路通訊要素
IP地址
連接埠號碼
傳輸協議
網路參考模型
七層OSI模型的基本概念要瞭解
網際層協議:包括:IP協議、ICMP協議、ARP協議、RARP協議。傳輸層協議:TCP協議、UDP協議。應用程式層協議:FTP、Telnet、SMTP、HTTP、RIP、NFS、DNS。
要真正實現網路通訊,首先要找到IP地址,IP地址是網路通訊的一大要素
IP地址:InetAddress
網路中裝置標識
不易記憶,可用本機名
本地迴環地址:127.0.0.1,這個地址,只為訪問本機
IP地址是對外暴露的標識,可以通過擷取IP地址,訪問
為了進行應用程式的標識區分,就提供了一些數字來標識應用程式,比如QQ 用4000來標識,我的電腦QQ發訊息,發送到IP 位址是: 192.168.0.1 的編號為4000的應用程式上。而這些數字就是(邏輯)連接埠。
機箱上的連接埠:是物理連接埠
連接埠號碼
用於標識進程的邏輯地址,不同進程的標識
有效連接埠,0~65535,其中0~1024系統使用或保留連接埠。
也就是說盡量保證( 1024 < 連接埠編號 <= 65535)
而防火牆,就是利用連接埠實現的,比如QQ的連接埠號碼是4000,防火牆設定,連接埠4000的資料,禁止發送,就使得QQ無法串連到網路
IP對象
IP地址比較複雜,在Java中也就被封裝成了對象,java.net包中提供了網路傳輸涉及的對象
類 InetAddress:此類表示互連網協議 (IP) 地址。
InetAdress類下有Inet4Address,Inet6Address兩大類,使IP地址,不易衝突
存在於網際層,該層能識別IP地址,能封裝IP地址
InetAdress對象,無建構函式,說明肯定有方法返回對象,而且是靜態方法
簡單示範
public static void Demo()throws UnknownHostException {//擷取本地主機IP地址對象,要拋出未知主機異常InetAddress ip = InetAddress.getLocalHost();//擷取其他主機ip地址對象//ip = InetAddress.getByName("kevy-PC");//也可以寫IP地址ip = InetAddress.getByName("www.baidu.com");//擷取百度的IP地址System.out.println(ip.getHostAddress());//擷取主機IP地址System.out.println(ip.getHostName());//擷取主機名稱,如果沒有擷取到,說明解析時,區域網路找不到//還可能存在IP地址不唯一的可能,比如新浪、網易,伺服器叢集的情況//得到的IP對象是數組//InetAddress[] ipp = InetAddress.getAllByName("");}
網域名稱解析
正常在訪問主機時,比如訪問網易的主機,網易的主機,無非就是一台電腦儲存一些資料,主機有一個IP地址,
假設127.0.0.1,儲存著網易的網路資源
雖然在訪問網站的時候,是網域名稱,但實際上是IP地址,http://127.0.0.1,早期就是IP地址,但是IP地址有可能對應對應多個主機
所以就有了www(全球資訊網).網域名稱.com(屬於商業化組織).cn(所屬國家類別)
IP地址和網域名稱有著對應關係,在互連網有一些主機,儲存的就是這些對應關係,這就是網域名稱解析,而這些主機就是DNS(網域名稱解析伺服器),只有DNS才記錄網易的IP地址,DNS把IP地址返回你的電腦,再走網易
想提高解析速度,就可以實現本地解析,在本地建立一張網域名稱解析列表,主機本身就內建了,只需我們去配置即可,
C:\Windows\System32\drivers\etc
網域名稱解析時,先走的不是互連網,而是本機,本機失敗再到互連網,解析
所以,由此,就可以在瀏覽一些網站時,可以屏蔽一些網站的垃圾廣告,將廣告網站的網域名稱記錄,配置在本地
127.0.0.1 XXXXX,這樣就會先在本地用自己的IP解析,網站也就打不開,不走互連網。
360屏蔽網址也是這個原理
Socket(插座)
學習傳輸協議,就要先瞭解Socket
要進行網路傳輸就必須有兩個端點,這兩個端點想要通訊,就必須串連,端點就可以理解為Socket
Socket是為網路服務提供的一種機制
通訊的兩端想要通訊必須有Socket
網路通訊其實就是Socket間的通訊
資料在兩個Socket間通過IO傳輸
所以網路編程也可以叫Socket編程
JAVA怎學?對於初學者買什書好一些
C是最基本的門檻,建議你熟悉一下C在學JAVA,掌握函數,FOR語句,IF語句,WHILE語句的用法,基本上就可以學習JAVA了
<Think in java 3>很不錯,看看,網上有中文版的下載~比書店賣的翻譯的要好!
要想做網站就得學jsp,有一本<jsp應用開發詳解>飛思科技出版的!
再介紹幾本:
java編程思想
java就業培訓教程
21天學通JAVA
自學《window程式設計》需要什基礎?例如什基礎課程之類的
學校教的C語言基礎,一般都是在Windows系統下的命令列介面下啟動並執行,可以輸出一些字元,也可以輸入一些字元。因為Windows下的操作都可以通過滑鼠點擊來實現,所以就很少回去用到命令列的程式,因此Windows系統提供的命令列程式就會很少。
其實命令列程式的功能是非常強大的,LZ可以去學習使用一下Ubuntu這個作業系統,就會體會到命令列程式的強大,像VIM命令列編輯器,這個類似於記事本,當然功能超級強大,還有很多很多。
LZ說的圖形化的小程式,說的應該是Windows的視窗介面的程式,可以縮小、也可以放大,還可以拖來拖去。這個你用VB或C#來做最簡單了,直接拖放控制項,然後寫幾個事件響應函數,比如按一下滑鼠一個按鈕回去執行你自己定義的函數,這就是所謂的事件驅動機制。
如果LZ想使用C語言來編寫Windows圖形介面程式的話,就需要去學習一下WIN32 API的使用,介紹這方面內容的書已經很少了。LZ也可以去學習一下MFC,經典書籍是《MFC深入淺出》,這個需要LZ具有C++物件導向語言的基礎,也是直接拖放控制項,然後註冊事件處理函數。