搬磚 TCP和UDP的最完整的區別

2021-09-11 01:44:53 字數 3432 閱讀 1187

**:

個人分類: 網路程式設計 

tcp:

tcp程式設計的伺服器端一般步驟是: 

1、建立乙個socket,用函式socket(); 

2、設定socket屬性,用函式setsockopt(); * 可選 

3、繫結ip位址、埠等資訊到socket上,用函式bind(); 

4、開啟監聽,用函式listen(); 

5、接收客戶端上來的連線,用函式accept(); 

6、收發資料,用函式send()和recv(),或者read()和write(); 

7、關閉網路連線; 

8、關閉監聽; 

tcp程式設計的客戶端一般步驟是: 

1、建立乙個socket,用函式socket(); 

2、設定socket屬性,用函式setsockopt();* 可選 

3、繫結ip位址、埠等資訊到socket上,用函式bind();* 可選 

4、設定要連線的對方的ip位址和埠等屬性; 

5、連線伺服器,用函式connect(); 

6、收發資料,用函式send()和recv(),或者read()和write(); 

7、關閉網路連線;

udp:**:

1、tcp與udp區別總結:

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

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

tcp通過校驗和,重傳控制,序號標識,滑動視窗、確認應答實現可靠傳輸。如丟包時的重發控制,還可以對次序亂掉的分包進行順序控制。

3、udp具有較好的實時性,工作效率比tcp高,適用於對高速傳輸和實時性有較高的通訊或廣播通訊。

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

5、tcp對系統資源要求較多,udp對系統資源要求較少。

2、為什麼udp有時比tcp更有優勢?

udp以其簡單、傳輸快的優勢,在越來越多場景下取代了tcp,如實時遊戲。

(1)網速的提公升給udp的穩定性提供可靠網路保障,丟包率很低,如果使用應用層重傳,能夠確保傳輸的可靠性。

(2)tcp為了實現網路通訊的可靠性,使用了複雜的擁塞控制演算法,建立了繁瑣的握手過程,由於tcp內建的系統協議棧中,極難對其進行改進。

採用tcp,一旦發生丟包,tcp會將後續的包快取起來,等前面的包重傳並接收到後再繼續傳送,延時會越來越大,基於udp對實時性要求較為嚴格的情況下,採用自定義重傳機制,能夠把丟包產生的延遲降到最低,儘量減少網路問題對遊戲性造成影響。

3、udp和tcp程式設計步驟也有些不同,如下:

tcp:

tcp程式設計的伺服器端一般步驟是:

1、建立乙個socket,用函式socket();     socket socketlisten =socket(af_inet,sock_stream, ipproto_tcp);

2、設定socket屬性,用函式setsockopt(); * 可選

3、繫結ip位址、埠等資訊到socket上,用函式bind(); socket_error = bind(socketlisten,(const sockaddr*)&addr,sizeof(addr))

4、開啟監聽,用函式listen();                 socket_error == listen(socketlisten,2)

5、接收客戶端上來的連線,用函式accept();    socket socketwaiter = accept(socketlisten,

_out_    struct sockaddr *addr

int send(

_in_  socket s,         //向哪個socket傳送,accept返回的socket。

_in_  const char *buf,

_in_  int len,

_in_  int flags

);                               由於

send(socketclient,(const char *)&fh,sizeof(fh),0);

recv(socketclient,szbuf,sizeof(szbuf),0);

udp:

與之對應的udp程式設計步驟要簡單許多,分別如下:

udp程式設計的伺服器端一般步驟是:

1、建立乙個socket,用函式socket();

2、設定socket屬性,用函式setsockopt();* 可選

3、繫結ip位址、埠等資訊到socket上,用函式bind();

4、迴圈接收資料,用函式recvfrom();

5、關閉網路連線;

udp程式設計的客戶端一般步驟是:

1、建立乙個socket,用函式socket();

2、設定socket屬性,用函式setsockopt();* 可選

3、繫結ip位址、埠等資訊到socket上,用函式bind();* 可選

4、設定對方的ip位址和埠等屬性;

5、傳送資料,用函式sendto();

6、關閉網路連線;

int recvfrom(

_in_         socket s,       //繫結的socket

_out_        char *buf,

_in_         int len,

_in_         int flags,

_out_        struct sockaddr *from,  //用來接收對方的

_inout_opt_  int *fromlen

);int nres=recvfrom(pthis->m_socketlisten,szbuf,sizeof(szbuf),0,(sockaddr*)&addrclient,&nsize);//0處標誌位

sendto(m_socketlisten,szbuffer,nsize,0,(const sockaddr*)&addr,sizeof(sockaddr_in))

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

4、將socket設定為廣播屬性

bool optval=true;

setsockopt(m_socketlisten,sol_socket,so_broadcast,(const char *)&optval,sizeof(bool));

5、將socket設定為非阻塞。

//bool benable=true;

//ioctlsocket(m_socketlisten,fionbio,(u_long*)&benable);

6、tcp頭,20位元組

7、udp首部,8個位元組

TCP和UDP的最完整的區別

tcp udp tcp與udp基本區別 1.基於連線與無連線 2.tcp要求系統資源較多,udp較少 3.udp程式結構較簡單 4.流模式 tcp 與資料報模式 udp 5.tcp保證資料正確性,udp可能丟包 6.tcp保證資料順序,udp不保證 udp應用場景 1.面向資料報方式 2.網路資料大...

TCP和UDP的最完整的區別

tcp udp tcp與udp基本區別 1.基於連線與無連線 2.tcp要求系統資源較多,udp較少 3.udp程式結構較簡單 4.流模式 tcp 與資料報模式 udp 5.tcp保證資料正確性,udp可能丟包 6.tcp保證資料順序,udp不保證 udp應用場景 1.面向資料報方式 2.網路資料大...

TCP和UDP的最完整的區別

tcp udp tcp與udp基本區別 1.基於連線與無連線 2.tcp要求系統資源較多,udp較少 3.udp程式結構較簡單 4.流模式 tcp 與資料報模式 udp 5.tcp保證資料正確性,udp可能丟包 6.tcp保證資料順序,udp不保證 udp應用場景 1.面向資料報方式 2.網路資料大...