java高階10 面向網路程式設計

2021-08-15 19:56:39 字數 2730 閱讀 6194

網路協議

通過計算機網路可以使多台計算機實現連線,位於同乙個網路中的計算機在進行連線和通訊時需要遵守一定的規則,這就好比在道路中行駛的汽車一定要遵守交通規則一樣。在計算機網路中,這些連線和通訊的規則被稱為網路通訊協議,它對資料的傳輸格式、傳輸速率、傳輸步驟等做了統一規定,通訊雙方必須同時遵守才能完成資料交換。

網路通訊協議有很多種,目前應用最廣泛的是tcp/ip協議(transmission control protocal/internet protoal傳輸控制協議/英特網互聯協議),它是乙個包括tcp協議和ip協議,udp(user datagram protocol)協議和其它一些協議的協議組。

在進行資料傳輸時,要求傳送的資料與收到的資料完全一樣,這時,就需要在原有的資料上新增很多資訊,以保證資料在傳輸過程中資料格式完全一致。

ip位址和埠號

計算機在網路中實現通訊的乙個標識號,通過這個標識號來指定接受資料的計算機或傳送資料的計算機

在tcp/ip協議中,這個標識號就是ip位址,它可以唯一標識一台計算機,目前,ip位址廣泛使用的版本是ipv4,它是由4個位元組大小的二進位制數來表示,如:00001010000000000000000000000001。由於二進位制形式表示的ip位址非常不便記憶和處理,因此通常會將ip位址寫成十進位制的形式,每個位元組用乙個十進位制數字(0-255)表示,數字間用符號「.」分開,如 「192.168.1.100」。

隨著計算機網路規模的不斷擴大,對ip位址的需求也越來越多,ipv4這種用4個位元組表示的ip位址面臨枯竭,因此ipv6 便應運而生了,ipv6使用16個位元組表示ip位址,它所擁有的位址容量約是ipv4的8×10^28倍,達到2^128個(算上全零的),這樣就解決了網路位址資源數量不夠的問題。

通過ip位址可以連線到指定計算機,但如果想訪問目標計算機中的某個應用程式,還需要指定埠號。在計算機中,不同的應用程式是通過埠號區分的。埠號是用兩個位元組(16位的二進位制數)表示的,它的取值範圍是0~65535,其中,0~1023之間的埠號用於一些知名的網路服務和應用,使用者的普通應用程式需要使用1024以上的埠號,從而避免埠號被另外乙個應用或服務所占用。

網路通訊的三要素

1.ip位址

2.埠號

3.通訊協議tcp/ip或upd協議

inetaddressudp是無連線通訊協議,即在資料傳輸時,資料的傳送端和接收端不建立邏輯連線。簡單來說,當一台計算機向另外一台計算機傳送資料時,傳送端不會確認接收端是否存在,就會發出資料,同樣接收端在收到資料時,也不會向傳送端反饋是否收到資料。

使用udp協議的缺點

由於udp的面向無連線性,不能保證資料的完整性,因此在傳輸重要資料時不建議使用udp協議

udp的交換過程如下圖所示。

udp通訊的過程就像是貨運公司在兩個碼頭間傳送貨物一樣。在碼頭傳送和接收貨物時都需要使用貨櫃來裝載貨物,udp通訊也是一樣,傳送和接收的資料也需要使用「貨櫃」進行打包,為此jdk中提供了乙個datagrampacket類,該類的例項物件就相當於乙個貨櫃,用於封裝udp通訊中傳送或者接收的資料。

// 這是乙個udp的demo的客戶端

public

class clientdemo

}// 這是乙個udp的demo的伺服器端

public

class serverdemo

}

serversocket

socket

int getport(); // 該方法返回乙個int型別物件,該物件是socket物件與伺服器端連線的埠號

inetaddress getlocaladdress(); // 該方法用於獲取socket物件繫結的本地ip位址,並將ip位址封裝成inetaddress型別的物件返回

void close(); // 該方法用於關閉socket連線,結束本次通訊。在關閉socket之前,應將與socket相關的所有的輸入/輸出流全部關閉,這是因為乙個良好的程式應該在執行完畢時釋放所有的資源

inputstream getinputstream(); // 該方法返回乙個inputstream型別的輸入流物件,如果該物件是由伺服器端的socket返回,就用於讀取客戶端傳送的資料,反之,用於讀取伺服器端傳送的資料

outputstream getoutputstream(); // 該方法返回乙個outputstream型別的輸出流物件,如果該物件是由伺服器端的socket返回,就用於向客戶端傳送資料,反之,用於向伺服器端傳送資料

在socket類的常用方法中,getinputstream()和getoutstream()方法分別用於獲取輸入流和輸出流。當客戶端和服務端建立連線後,資料是以io流的形式進行互動的,從而實現通訊。

- 案例:

// 這是乙個tcp協議的demo的客戶端

public

class clientdemo

// 關流

outputstream.close();

bufferedinputstream.close();

}}// 這是乙個tcp協議的demo中的伺服器端

public

class serverdemo

// 關流

inputstream.close();}}

java高階(三) 網路程式設計

osi模型層次結構圖 從上圖中可以看見,osi模型共分7層,每層的名稱和功能從上圖中都有簡單的解釋,在此不再贅述。1 ip位址 tcp ip tcp ip是一組用於用於實現網路互聯的通訊協議。internet網路體系結構以tcp ip為核心。基於tcp ip的參考模型將協議分為四個層次,分別是 網路...

面向網路程式設計

網路程式設計 c s 與 程式設計 b s 的區別?程式設計是編寫網頁html,jsp,servelet等,只需要編寫一端 server端 服務端 不需要編寫client端 客戶端 已經編寫好了 網路程式設計相對底層一些,服務端和客戶端都需要編寫,比如說qq,msn,默默等。網路程式設計又叫tcp ...

網路程式設計10

accept 發生在三次握手之後。第一次握手 客戶端傳送 syn包 syn j 到伺服器。第二次握手 伺服器收到 syn包,必須確認客戶的 syn ack j 1 同時自己也傳送乙個 ask包 ask k 第三次握手 客戶端收到伺服器的 syn ack包,向伺服器傳送確認包 ack ack k 1 ...