原文作者: xingguang
原文鏈接:https://www.tiance.club/post/3905120281.html
1拇泣、TCP與UDP區(qū)別總結(jié):
1、TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的训枢,即發(fā)送數(shù)據(jù)之前不需要建立連接
2宛官、TCP提供可靠的服務(wù)。也就是說碳竟,通過TCP連接傳送的數(shù)據(jù)顽染,無差錯漾岳,不丟失,不重復(fù)家乘,且按序到達;UDP盡最大努力交付蝗羊,即不保證可靠交付
Tcp通過校驗和,重傳控制仁锯,序號標識耀找,滑動窗口、確認應(yīng)答實現(xiàn)可靠傳輸业崖。如丟包時的重發(fā)控制野芒,還可以對次序亂掉的分包進行順序控制。
3双炕、UDP具有較好的實時性狞悲,工作效率比TCP高,適用于對高速傳輸和實時性有較高的通信或廣播通信妇斤。
4.每一條TCP連接只能是點到點的;UDP支持一對一摇锋,一對多,多對一和多對多的交互通信
5站超、TCP對系統(tǒng)資源要求較多荸恕,UDP對系統(tǒng)資源要求較少。
原文作者: xingguang
原文鏈接:https://www.tiance.club/post/3905120281.html
2死相、為什么UDP有時比TCP更有優(yōu)勢?
UDP以其簡單融求、傳輸快的優(yōu)勢,在越來越多場景下取代了TCP,如實時游戲算撮。
(1)網(wǎng)速的提升給UDP的穩(wěn)定性提供可靠網(wǎng)絡(luò)保障生宛,丟包率很低县昂,如果使用應(yīng)用層重傳,能夠確保傳輸?shù)目煽啃浴?/p>
(2)TCP為了實現(xiàn)網(wǎng)絡(luò)通信的可靠性陷舅,使用了復(fù)雜的擁塞控制算法倒彰,建立了繁瑣的握手過程,由于TCP內(nèi)置的系統(tǒng)協(xié)議棧中蔑赘,極難對其進行改進狸驳。
采用TCP,一旦發(fā)生丟包缩赛,TCP會將后續(xù)的包緩存起來,等前面的包重傳并接收到后再繼續(xù)發(fā)送撰糠,延時會越來越大酥馍,基于UDP對實時性要求較為嚴格的情況下,采用自定義重傳機制阅酪,能夠把丟包產(chǎn)生的延遲降到最低旨袒,盡量減少網(wǎng)絡(luò)問題對游戲性造成影響。
3术辐、UDP和TCP編程步驟也有些不同砚尽,如下:
TCP:
TCP編程的服務(wù)器端一般步驟是:
1、創(chuàng)建一個socket辉词,用函數(shù)socket()
2必孤、設(shè)置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冰评、關(guān)閉網(wǎng)絡(luò)連接映胁; closesocket(SocketListen);closesocket(SocketWaiter);
8、關(guān)閉監(jiān)聽甲雅;
SOCK_STREAM這種的特點是面向連接的解孙,即每次收發(fā)數(shù)據(jù)之前必須通過connect建立連接坑填,而SOCK_DGRAM這種是User Datagram Protocol協(xié)議的網(wǎng)絡(luò)通訊,它是無連接的弛姜,不可靠的脐瑰。
原文作者: xingguang
原文鏈接:https://www.tiance.club/post/3905120281.html
TCP編程的客戶端一般步驟是:
1、創(chuàng)建一個socket廷臼,用函數(shù)socket()苍在;
2、設(shè)置socket屬性荠商,用函數(shù)setsockopt();* 可選
3寂恬、綁定IP地址、端口等信息到socket上莱没,用函數(shù)bind();* 可選
4初肉、設(shè)置要連接的對方的IP地址和端口等屬性;
5饰躲、連接服務(wù)器牙咏,用函數(shù)connect();
6嘹裂、收發(fā)數(shù)據(jù)妄壶,用函數(shù)send()和recv(),或者read()和write();
7寄狼、關(guān)閉網(wǎng)絡(luò)連接丁寄;
UDP:
與之對應(yīng)的UDP編程步驟要簡單許多,分別如下:
UDP編程的服務(wù)器端一般步驟是:
1例嘱、創(chuàng)建一個socket狡逢,用函數(shù)socket();
2拼卵、設(shè)置socket屬性奢浑,用函數(shù)setsockopt();* 可選
3、綁定IP地址腋腮、端口等信息到socket上雀彼,用函數(shù)bind();
4、循環(huán)接收數(shù)據(jù)即寡,用函數(shù)recvfrom();
5徊哑、關(guān)閉網(wǎng)絡(luò)連接;
UDP編程的客戶端一般步驟是:
1聪富、創(chuàng)建一個socket莺丑,用函數(shù)socket();
2、設(shè)置socket屬性梢莽,用函數(shù)setsockopt();* 可選
3萧豆、綁定IP地址、端口等信息到socket上昏名,用函數(shù)bind();* 可選
4纳寂、設(shè)置對方的IP地址和端口等屬性;
5息罗、發(fā)送數(shù)據(jù)泞当,用函數(shù)sendto();
6挡毅、關(guān)閉網(wǎng)絡(luò)連接;
原文作者: xingguang
原文鏈接:https://www.tiance.club/post/3905120281.html