黑馬程序員——網絡編程

網絡參考模型

網絡通訊中的各要素
IP地址:一組二進制數字,用於給每一臺連入互聯網的主機分配一個邏輯地址。IP地址分爲4段,每段一個字節(8個二進制位)。
IP端口:一個數字編號,範圍0~65535,用於區分同一IP地址上不同的服務,使不同端口上的通信不相互干擾。
傳輸協議:通訊規則。

網絡模型中各層的功能及協議


java中的UDP傳輸:
1.UDP協議傳輸的數據被稱爲數據報,被包裝到數據報包中,同時被包裝到數據報包中的還有數據要被髮送到的主機地址和端口號;
2.數據報包中的數據大小被限制在64k內;
3.面向無連接,是不可靠的協議:
4.傳輸速度快。
UDP傳輸的數據報是字節數組(byte[] ),要傳送到的目的地主機地址是InetAddress類對象,端口號是int值,由這些參數包裝後的UDP數據報包是DatagramPacket對象(DatagramPacket的構造方法:    DatagramPacket(byte[] b,int length,InetAddress address,int port)  )。DatagramPacket的發送和接收都是由綁定到特定端口號(int 值)的數據報套接字(DatagramSocket)對象負責的,也就是說發送方和接收方都要創建DatagramSocket對象,該對象綁定了端口號,其無參構造方法將會綁定一個任意可用的端口,傳入int值的構造方法將會嘗試綁定該int值對應的端口。
然後,InetAddress對象的構造方法:
1)由原始IP地址創建(byte[] ) ——static InetAddress getByAddress(byte[] addr)
2)由主機名創建(機器名或IP地址的文本表示)—— static InetAddress getByName(String host)
3)由主機名和IP地址創建—— static InetAddress getByAddress(String host,byte[] addr)
4)獲取本機InetAddress—— static InetAddress getLocalHost()
InetAddress的其它方法:
byte[] getAddress()獲取此InetAddress對象的原始IP地址
String getHostName()獲取此IP地址的主機名
String getHostAddress()獲取此IP地址的字符串
DatagramSocket發送和接收數據包的方法:
void send(DatagramPacket p)發送數據包
void receive(DatagramPacket p) 接收數據包,此方法是阻塞式方法,沒有接收到數據包就等待

java中的TCP傳輸:
1.建立連接,形成傳輸數據的通道;
2.在連接中進行大數據量傳輸;
3.建立連接,是可靠協議;
4.必須建立連接,效率會稍低。

TCP傳輸建立連接的過程是一方(客戶端)發起連接,另一方(服務端)等待被連接,等待被連接的一方需要先建立。具體過程是:1.服務端建立服務端套接字(ServerSocket)以將服務綁定到端口(無參創建就綁定到任意可用的端口,傳入int值端口號就嘗試綁定到特定端口);2.服務端套接字調用accept()方法,使服務端進入等待連接狀態(該方法是阻塞式方法);3.在服務端處於等待狀態的情況下,客戶端建立客戶端套接字,該套接字構造過程傳入服務端地址和服務端套接字端口號,該套接字一建立就向服務端發起連接並等待服務端的回饋信息,服務端收到該連接請求後其accept()方法返回客戶端的套接字,並向客戶端反饋,服務端程序繼續進行,客戶端收到反饋信息後繼續執行,如果客戶端套接字建立並向服務端發起請求後,服務端並未處於等待狀態,客戶端就會拋出異常。

TCP傳輸信息的過程:
當服務端和客戶端的連接建立完成後,都可以從自己的Socket對象中獲得輸入流和輸出流,一方輸出流的寫入方法寫入的數據流向的正是另一方輸入流讀取方法將要讀取的內容。
Socket類的獲取輸入流和輸出流對象的方法:
InputStream getInputStream()
OutputStream getOutputStream()

域名解析
主機名是如何被解析爲IP地址的:
首先在本地的系統配置文件中查找與該主機名匹配的IP地址,如果本地未登記該主機名,就到網絡DNS服務器上去查找與該主機名相匹配的IP地址,再找不到就會出現找不到該主機地址。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章