日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

为什么聊天软件一般采用UDP协议

發(fā)布時間:2023/12/8 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么聊天软件一般采用UDP协议 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

TCP是美國國防部設計的兩種傳輸協(xié)議之一,另一種是UDP。UDP是一種不可靠的網(wǎng)絡服務,負載比 較小,而TCP則是一種可靠的通信服務,負載相對而言比較大。TCP采用套接字(socket)或者端口 (port)來建立通信。TCP給端口到端口通信提供了錯誤和流量控制機制,同時TCP還負責建立連接 、處理終止和中斷的端對端通信控制。 通常情況下我們認為TCP相比UDP具有更大的通信負載,UDP不具備TCP的控制特性,TCP用了大約20個字節(jié)來發(fā)送一個65Kbps的數(shù)據(jù)塊, 這個報頭占整個數(shù)據(jù)塊的比重也不過3%。總得來看,這個負載是合理的,何況還令通信具有了可靠性性。
??tcp?udp
?是否連接?面向連接?面向非連接
?傳輸可靠性?可靠的?不可靠的
?應用場合?傳輸大量數(shù)據(jù)?傳輸少量數(shù)據(jù)
?速度?慢?快
? 所以UDP的速度快的優(yōu)點是很關鍵的因素,而且,UDP是“推”的協(xié)議,有多少個接收客戶,客戶端 是否鏈接均無所謂,只顧把數(shù)據(jù)發(fā)送/廣播出去就行;這對鏈接不可靠,需要一對多等情形很有用。 TCP關鍵是可靠,是基于可靠鏈接基礎上的協(xié)議,因而可能較慢,網(wǎng)絡數(shù)據(jù)量較大。當然UDP并不一定永遠都比TCP快。我們之所以認為UDP快,僅僅是從報頭中傳輸?shù)男畔⒈戎馗髞砜紤] 的。但是如果網(wǎng)絡情況,可能UDP就不一定比TCP快了。UDP只負責發(fā)送,因而不會管網(wǎng)絡的情況,一旦 網(wǎng)絡阻塞,繼續(xù)發(fā)UDP包只會加重整個網(wǎng)絡的負擔。而此時TCP的控制及復雜的傳輸算法就起到很好的 作用了。通過自適應窗口等方式減少實際發(fā)往網(wǎng)絡的數(shù)據(jù)。就像堵車的時候一樣,UDP只會越來越堵, 而TCP還可以緩慢的行走。還有像聊天這種及時性高,如果采用TCP短連接,頻繁的連接斷開也會增加 網(wǎng)絡負擔。綜上所述:如果是每次連接時間較短,或者即時性要求高,發(fā)送內(nèi)容較少,則采用UDP;而對數(shù)據(jù)完整 性、可靠性要求較高,傳輸性能要求較低時采用TCP。而我們知道像QQ這種大型的聊天軟件卻主要使用的是UDP連接,而以TCP為輔。即使是傳文件,也是以UDP 為主,個人認為這主要還是從服務器的角度來考慮的。 首先是每一個客戶實際上都是和服務器交互,再由服務器轉發(fā)給正在通信的用戶。 如果每一個QQ從一上線到下線的這段時間全部采用TCP長連接,這對服務器的負擔很大。而如果采用TCP 短連接,頻繁的連接斷開也會造成網(wǎng)絡負擔。而采用UDP則可以避開上述這些麻煩,減少服務器的負擔。

?

?

基于上述不同,UDP和TCP編程步驟也有些不同,如下: TCP編程的服務器端一般步驟是:UDP編程的服務器端一般步驟是:

1、創(chuàng)建一個socket,用函數(shù)socket();   

2、設置socket屬性,用函數(shù)setsockopt(); * 可選?

3、綁定IP地址、端口等信息到socket上,用函數(shù)bind();  

4、開啟監(jiān)聽,用函數(shù)listen();   

5、接收客戶端上來的連接,用函數(shù)accept();

6、收發(fā)數(shù)據(jù),用函數(shù)send()和recv(),或者read()和write();   

7、關閉網(wǎng)絡連接;   

8、關閉監(jiān)聽;

1、創(chuàng)建一個socket,用函數(shù)socket();  

2、設置socket屬性,用函數(shù)setsockopt();* 可選   

3、綁定IP地址、端口等信息到socket上,用函數(shù)bind();

4、循環(huán)接收數(shù)據(jù),用函數(shù)recvfrom();?

5、關閉網(wǎng)絡連接;

TCP編程的客戶端一般步驟是: UDP編程的客戶端一般步驟是:

1、創(chuàng)建一個socket,用函數(shù)socket();   

2、設置socket屬性,用函數(shù)setsockopt();* 可選   

3、綁定IP地址、端口等信息到socket上,用函數(shù)bind();* 可選   

4、設置要連接的對方的IP地址和端口等屬性;   

5、連接服務器,用函數(shù)connect();?

6、收發(fā)數(shù)據(jù),用函數(shù)send()和recv(),或者read()和write();   

7、關閉網(wǎng)絡連接;

1、創(chuàng)建一個socket,用函數(shù)socket();   

2、設置socket屬性,用函數(shù)setsockopt();* 可選   

3、綁定IP地址、端口等信息到socket上,用函數(shù)bind();* 可選   

4、設置對方的IP地址和端口等屬性;?

5、發(fā)送數(shù)據(jù),用函數(shù)sendto();   6、關閉網(wǎng)絡連接;

?

總結

以上是生活随笔為你收集整理的为什么聊天软件一般采用UDP协议的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。