1. 程式人生 > >(JAVA)基於Socket的TCP和UDP程式設計

(JAVA)基於Socket的TCP和UDP程式設計

(JAVA)基於Socket的TCPUDP程式設計

最近空閒下來了,順便學習了下Java的網路程式設計,例子都是來源網路,整理了下,先記錄下來,以便後用!

一. TCP 、UDP、Scoket

TCPTransmission Control Protocol

UDPUser Datagram Protocol

Socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個呼叫介面(API),通過Socket,我們才能使用TCP/IP協議。

TCP和UDP是OSI模型中的運輸層中的協議。TCP提供可靠的通訊傳輸,而UDP則常被用於讓廣播和細節控制交給應用的通訊傳輸

TCP充分實現愛呢了資料傳輸時各種控制功能,可以進行丟包的重發控制,還可以對次序亂掉的分包進行順序控制。而這些在UDP中都沒有。此外,TCP作為一種面向有連線的協議,只有在確認通訊對端存在時才會傳送資料,從而可以控制通訊流量的浪費。

TCP與UDP如何加以區分使用?

        TCP用於在傳輸層有必要實現可靠性傳輸的情況。由於它是面向有連線並具備順序控制、重發控制等機制的。所以它可以為應用提供可靠傳輸。

另一方面,UDP主要用於那些對高速傳輸和實時性有較高要求的通訊或廣播通訊。舉一個IP電話進行通話的例子。如果使用TCP,資料在傳送途中如果丟失會被重發,但是這樣無法流暢地傳輸通話人的聲音,會導致無法進行正常交流。而採用UDP,它不會進行重發處理。從而也就不會有聲音大幅度延遲到達的問題。即使有部分資料丟失,也只是影響某一小部分的通話。此外,在多播與廣播通訊中也使用UDP而不是UDP。RIP、DHCP等基於廣播的協議也要依賴於UDP。

二. TCP和UDP的區別

1. TCP面向連線;UDP是無連線的,即傳送資料之前不需要建立連線。通俗理解:TCP就是打電話,對方必須應答,才能連線,UDP就是寫信,只管信寄出去,不管對方收到與否;

2. TCP提供可靠的服務。也就是說,通過TCP連線傳送的資料,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付;

3. TCP面向位元組流,實際上是TCP把資料看成一連串無結構的位元組流;UDP是面向報文的;

UDP沒有擁塞控制,因此網路出現擁塞不會使源主機的傳送速率降低(對實時應用很有用,如IP電話,實時視訊會議等);

4. 每一條TCP連線只能是點到點的;UDP支援一對一,一對多,多對一和多對多的互動通訊;

5. TCP首部開銷20位元組;UDP的首部開銷小,只有8個位元組;

6. TCP的邏輯通訊通道是全雙工的可靠通道,UDP則是不可靠通道;

三. 兩者的程式設計框架

1. TCP:

2. UDP:

四. TCP、UDP優缺點

TCP優缺點:

優點:

1. TCP提供以認可的方式顯式地建立和終止連線。

2.TCP保證可靠的、順序的(資料包以傳送的順序接收)以及不會重複的資料傳輸。

3. TCP處理流控制。

4. 允許資料優先

5. 如果資料沒有傳送到,則TCP套介面返回一個出錯狀態條件。

6. TCP通過保持連續並將資料塊分成更小的分片來處理大資料塊。—無需程式設計師知道

缺點:TCP在轉移資料時必須建立(並保持)一個連線。這個連線給通訊程序增加了開銷,讓它比UDP速度要慢。

UDP優缺點:

1. UDP不要求保持一個連線

2. UDP沒有因接收方認可收到資料包(或者當資料包沒有正確抵達而自動重傳)而帶來的開銷。

3. 設計UDP的目的是用於短應用和控制訊息

4. 在一個數據包連線一個數據包的基礎上,UDP要求的網路頻寬比TDP更小。

五. 下面是驗證過的幾個示例程式碼

4. UDP的多執行緒連線