C 網路程式設計之TCP UDP

2021-09-11 20:56:53 字數 3866 閱讀 6617

最近因為需要用到網路程式設計的知識點,看了這篇部落格,感覺非常有用,對tcp/udp描述的很通熟易懂:

基於tcp協議的socket通訊類似於b/s架構,面向連線,但不同的是伺服器端可以向客戶端主動推送訊息。 

使用tcp協議通訊需要具備以下幾個條件: 

(1).建立乙個套接字(socket) 

(2).繫結伺服器端ip位址及埠號(伺服器端) 

(3).利用listen()方法開啟監聽(伺服器端) 

(4).利用accept()方法嘗試與客戶端建立乙個連線(伺服器端) 

(5).利用connect()方法與伺服器建立連線(客戶端) 

(6).利用send()方法向建立連線的主機傳送訊息 

(7).利用receive()方法接受來自建立連線的主機的訊息(可靠連線) 

tcp通訊過程如下圖: 

基於udp協議是無連線模式通訊,占用資源少,響應速度快,延時低。至於可靠性,可通過應用層的控制來滿足。(不可靠連線) 

(1).建立乙個套接字(socket) 

(2).繫結伺服器端ip位址及埠號–伺服器端 

(3).通過sendto()方法向指定主機傳送訊息(需提供主機ip位址及埠) 

(4).通過recivefrom()方法接收指定主機傳送的訊息(需提供主機ip位址及埠) 

udp通訊過程如下圖: 

tcp協議和udp協議連線過程的區別如下: 

1.基於連線與無連線; 

2.對系統資源的要求(tcp較多,udp少); 

3.udp程式結構較簡單; 

4.tcp資料傳輸採用流模式與udp則採用資料報模式 ; 

5.tcp保證資料正確性,udp可能丟包,tcp保證資料順序,udp不保證。

該示例僅只進行了一次通訊

伺服器端:

using system;

using system.net;

using system.net.sockets;

using system.text;

namespace socket程式設計

); endpoint endpoint = new ipendpoint(ipaddress,7788);//ipendpoint是對ip + 埠的封裝

tcpserver.bind(endpoint);

//3.開始監聽,等待客戶端連線

tcpserver.listen(100);//引數是最大的連線數

console.writeline("開始監聽...");

//4.使用返回的socket與客戶端通訊

//暫停當前執行緒,直到有乙個客戶端連線過來,之後執行下面的**

socket clientsocket = tcpserver.accept();

console.writeline("客戶端請求連線...");

string message = "hello 歡迎您!";

byte data = encoding.utf8.getbytes(message);

clientsocket.send(data);

console.writeline("向客戶端傳送訊息...");

byte data2 = new byte[1024]; //建立乙個位元組陣列來當作容器,去接收客戶端傳送過來的資料

int length = clientsocket.receive(data2);

string message2 = encoding.utf8.getstring(data2, 0, length);

console.writeline("接收從客戶端發來的訊息..." + message2);

console.readkey();}}

}

客戶端:

using system;

using system.net;

using system.net.sockets;

using system.text;

namespace socket_tcp_客戶端}}

伺服器端:

using system;

using system.net;

using system.net.sockets;

using system.text;

using system.threading;

namespace socket程式設計_udp

static void receivemessage()}}

}

客戶端:

using system;

using system.net;

using system.net.sockets;

using system.text;

namespace socket_udp_客戶端

udpsocket.close();

console.readkey();}}

}

相比之下,

tcp的優點: 可靠,穩定 tcp的可靠體現在tcp在傳遞資料之前,會有三次握手來建立連線,而且在資料傳遞時,有確認、視窗、重傳、擁塞控制機制,在資料傳完後,還會斷開連線用來節約系統資源。

tcp的缺點: 慢,效率低,占用系統資源高,易被攻擊 tcp在傳遞資料之前,要先建連線,這會消耗時間,而且在資料傳遞時,確認機制、重傳機制、擁塞控制機制等都會消耗大量的時間,而且要在每台裝置上維護所有的傳輸連線,事實上,每個連線都會占用系統的cpu、記憶體等硬體資源。 而且,因為tcp有確認機制、三次握手機制,這些也導致tcp容易被人利用,實現dos、ddos、cc等攻擊。

udp的優點: 快,比tcp稍安全 udp沒有tcp的握手、確認、視窗、重傳、擁塞控制等機制,udp是乙個無狀態的傳輸協議,所以它在傳遞資料時非常快。沒有tcp的這些機制,udp較tcp被攻擊者利用的漏洞就要少一些。但udp也是無法避免攻擊的,比如:udp flood攻擊……

udp的缺點: 不可靠,不穩定 因為udp沒有tcp那些可靠的機制,在資料傳遞時,如果網路質量不好,就會很容易丟包。 基於上面的優缺點。

小結tcp與udp的區別:

1.基於連線與無連線;

2.對系統資源的要求(tcp較多,udp少);

3.udp程式結構較簡單;

4.流模式與資料報模式 ;

5.tcp保證資料正確性,udp可能丟包,tcp保證資料順序,udp不保證。

tcp協議和udp協議的差別 

tcp udp

是否連線 面向連線 面向非連線

傳輸可靠性 可靠 不可靠

應用場合 傳輸大量資料 少量資料

速度 慢 快

tcp與udp區別總結:

1、tcp面向連線(如打**要先撥號建立連線);udp是無連線的,即傳送資料之前不需要建立連線

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

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

4、每一條tcp連線只能是點到點的;udp支援一對一,一對多,多對一和多對多的互動通訊

5、tcp首部開銷20位元組;udp的首部開銷小,只有8個位元組

6、tcp的邏輯通訊通道是全雙工的可靠通道,udp則是不可靠通道

C 網路程式設計之TCP UDP

網路位元組順序 tcp ip 採用16 32 位高位先存格式 tcp ip 網路應用中,通訊的兩個程序主要採用 c s模式。伺服器要先啟動,並根據請求提供相應的服務 1 開啟乙個通訊通道訂告知本地主機,它願意在某一位址和埠上接受客戶請求 2 等待客戶請求到達該埠 3 接受到重複服務請求,處理該請求並...

unix網路程式設計之一TCP UDP

網路通訊中最常用的就是tcp udp。2種協議個有一些特點如下 udp是一種簡單的傳輸協議。應用程式寫資料到udp套介面。然後由它封裝成ipv4或ipv6的資料報,再傳送到目的位址。它不提供可靠性。它與伺服器不存在長期的連線關係。tcp是一種面向連線的協議。提供 可靠性 先連線,再傳輸資料。傳送資料...

java學習路程之網路程式設計 TCP UDP

public class demo01 1.tcp協議 tcp協議是面向連線的通訊協議,即在傳輸資料前先在傳送端和接收端建立邏輯連線,然後再傳輸資料,它提供了兩台計算機之間可靠無差錯的資料傳輸。在tcp連線中必須要明確客戶端與伺服器端,由客戶端向服務端發出連線請求,每次連線的建立都需要經過 三次握手...