色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > UDP和TCP兩大協議的區別,讓你快速高效掌握

UDP和TCP兩大協議的區別,讓你快速高效掌握 時間:2018-06-14      來源:未知

UDP和TCP兩大協議的區別

談起UDP與TCP兩大協議的異同,有人說我喜歡用TCP不喜歡用UDP,也有人說我喜歡用UDP而不喜歡用TCP,使用TCP的人說,我使用使用的協議比較可靠、不容易粘包、不容易丟包;使用UDP的人說,我使用的協議操作簡單、傳輸速度比較快;我想說的是各有各的好處與不足。下面就讓四哥給大家講講他們的優缺點與重要的區別,然后在選擇適合自己的協議進行開發吧。

一、TCP與UDP基本區別

1.基于連接與無連接

2.TCP要求系統資源較多,UDP較少;

3.UDP程序結構較簡單

4.流模式(TCP)與數據報模式(UDP);

5.TCP保證數據正確性,UDP可能丟包

6.TCP保證數據順序,UDP不保證

二、UDP應用場景:

1.面向數據報方式

2.網絡數據大多為短消息

3.擁有大量Client

4.對數據安全性無特殊要求

5.網絡負擔非常重,但對響應速度要求高

三、具體編程時的區別

1.socket()的參數不同

2.UDP Server不需要調用listen和accept

3.UDP收發數據用sendto/recvfrom函數

4.TCP:地址信息在connect/accept時確定

5.UDP:在sendto/recvfrom函數中每次均需指定地址信息

6.UDP:shutdown函數無效

7.UDP不需要經過三次握手與四次揮手的過程

編程區別

通常我們在說到網絡編程時默認是指TCP編程,即用前面提到的socket函數創建一個socket用于TCP通訊,函數參數我們通常填為SOCK_STREAM。即socket(PF_INET, SOCK_STREAM, 0),這表示建立一個socket用于流式網絡通訊。

SOCK_STREAM這種的特點是面向連接的,即每次收發數據之前必須通過connect建立連接,也是雙向的,即任何一方都可以收發數據,協議本身提供了一些保障機制保證它是可靠的、有序的,即每個包按照發送的順序到達接收方。

而SOCK_DGRAM這種是User Datagram Protocol協議的網絡通訊,它是無連接的,不可靠的,因為通訊雙方發送數據后不知道對方是否已經收到數據,是否正常收到數據。任何一方建立一個socket以后就可以用sendto發送數據,也可以用recvfrom接收數據。根本不關心對方是否存在,是否發送了數據。它的特點是通訊速度比較快。大家都知道TCP是要經過三次握手的,而UDP沒有。

基于上述不同,UDP和TCP編程步驟也有些不同,如下:

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:

與之對應的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、關閉網絡連接;

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

以下是他們具體的代碼的區別:

TCP編程代碼:

#include

#include

#include

#include

#include /* See NOTES */

#include

#include

#include

#include

#define SERV_PORT 5001

#define SERV_IP "192.168.7.8"

#define QUIT_STR "quit"

int main (void)

{

int fd = -1, newfd = -1;

struct sockaddr_in sin;

/* 1.創建套接字fd */

if ((fd = socket (AF_INET, SOCK_STREAM, 0)) < 0) { /* IPV4的TCP通信 */

perror ("socket");

exit (1);

}

/*2.1 填充sin結構體: 填寫IP地址和端口這兩個要素 */

bzero (&sin, sizeof (sin));

sin.sin_family = AF_INET;

sin.sin_port = htons (SERV_PORT); /* 網絡字節序的端口號 */

sin.sin_addr.s_addr = inet_addr (SERV_IP);

/* 2.2 綁定 */

if (bind (fd, (struct sockaddr *) &sin, sizeof (sin)) < 0) {

perror ("bind");

exit (1);

}

/*3. 把主動套接字變為被動套接字 */

listen (fd, 5);

printf("Server starting....OK!\n");

/*4.阻塞等待客戶端連接 */

if ((newfd = accept (fd, NULL, NULL)) < 0) {

perror ("accept");

exit (1);

}

/*5.讀寫客戶端數據 */

while (1) {

char buf[BUFSIZ];

bzero (buf, BUFSIZ);

read (newfd, buf, BUFSIZ - 1);

printf ("Server Read: %s\n", buf);

if (!strncasecmp (buf, QUIT_STR, strlen (QUIT_STR))) { //客戶端輸入了quit

close (newfd);

break;

}

}

close (fd);

return 0;

}

UDP 服務器編程代碼:

#include

#include

#include

#include

#include /* See NOTES */

#include

#include

#include

#include

#include

#define SERV_PORT 5001

#define SERV_IP "192.168.7.8"

#define QUIT_STR "quit"

void usage (char *s)

{

printf ("Usage:\n");

printf ("\t%s [serv_port]\n", s);

printf ("\tserv_port: server port.\n");

printf ("\n");

}

int main (int argc, char *argv[])

{

int fd = -1;

struct sockaddr_in sin;

int port = SERV_PORT;

/*優化4: 參數處理 */

if (argc != 1 && argc != 2) {

usage (argv[0]);

exit(1);

}

if (argc == 2) {

port = atoi (argv[1]);

}

/* 1.創建UDP套接字fd */

if ((fd = socket (AF_INET, SOCK_DGRAM, 0)) < 0) { /* IPV4的UDP通信 */

perror ("socket");

exit (1);

}

/*優化1: 允許綁定的IP地址和端口號能夠快速重用 */

int b_reuse = 1;

setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, &b_reuse, sizeof (int));

/*2.1 填充sin結構體: 填寫IP地址和端口這兩個要素 */

bzero (&sin, sizeof (sin));

sin.sin_family = AF_INET;

sin.sin_port = htons (port); /* 網絡字節序的端口號 */

sin.sin_addr.s_addr = htonl (INADDR_ANY); /*優化2: bind在任意IP */

/* 2.2 綁定 */

if (bind (fd, (struct sockaddr *) &sin, sizeof (sin)) < 0) {

perror ("bind");

exit (1);

}

printf ("UDP Server starting....OK!\n");

/*3.阻塞等待客戶端連接 */

int ret = -1;

char buf[BUFSIZ];

struct sockaddr_in cin;

socklen_t clen = sizeof (cin);

while (1) {

bzero (buf, BUFSIZ);

do {

ret = recvfrom (fd, buf, BUFSIZ - 1, 0, (struct sockaddr *) &cin, &clen);

} while (ret < 0 && EINTR == errno);

if (ret < 0) {

perror ("recvfrom");

continue;

}

char cli_ipv4[16];

if (inet_ntop (AF_INET, (void *) &cin.sin_addr, cli_ipv4, sizeof (cin)) == NULL) {

perror ("inet_ntop");

continue;

}

printf ("Client(%s:%d) said: %s\n", cli_ipv4, ntohs (cin.sin_port), buf);

}

close (fd);

return 0;

}

TCP與UDP區別總結:

1、TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發送數據之前不需要建立連接

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

3、TCP面向字節流,實際上是TCP把數據看成一連串無結構的字節流;UDP是面向報文的

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

4、每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信

5、TCP首部開銷20字節;UDP的首部開銷小,只有8個字節

6、TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道

來到這里相信很多玩網絡編程的朋友已經了解甚至熟悉了他們區別和用處了,但是我還是有必要的重新提一下,沒有什么東西是最好的,這好與壞只是相對而言,遵循著相對論的基本轉折,因人而異,適合自己的就好!現在UDP與TCP的區別懂了,還需要了解一下他們里面的具體協議和細節哦,下集再會!

上一篇:讓你全方位了解tftp協議,學tftp協議不再難

下一篇:什么是二進制,這里讓你通俗易懂

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5,京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 国产成AV人片在线观看天堂无码 | 高中生自慰WWW网站 国产日韩在线时看高清视频 | 久久五月丁香中文字幕 | 欧美片网站免费 | 人人摸人人舔人人鲁 | 性欧美VIDEOFREE高清精品 | 大地影院mv高清在线观看免费 | 色就是色网站 | 国产亚洲精品久久久久的角色 | 肉大捧一进一出好爽mba | 久久人妻无码毛片A片麻豆 最近韩国动漫hd免费观看 | 国产亚洲小视频线播放 | 欧美丰满老妇性猛交 | 亚洲欧美日韩综合久久久久 | 国产AV高清无亚洲 | 日本三级日产三级国产三级 | 亚洲av无码久久久久久精品同性 | 79年熟女大胆露脸啪啪对白P | 日本xxxx娇小| 国产精品久久久久久户外露出 | 久久无码中文字幕免费影院 | 绯色av中文字幕一区三区 | 色综合伊人丁香五月桃花婷婷 | 色在线观看视频 | 欧洲免费vps一级毛片 | 亚洲色WWW成人永久网址 | 性夜久久一区国产9人妻 | 天天澡日日澡狠狠欧美老妇 | 各类熟女熟妇真实视频 | ass极品裸体呦女pics | 国产片免费福利片永久 | 色哟哟网站在线观看 | 地下室极端性调教 | 丰满爆乳BBWBBWBBW | 中文字幕乱偷无码AV先锋蜜桃 | 天天躁日日躁狠狠躁日日躁 | 18成人片黄网站WWW | 无码中文字幕AV免费放软件 | 精品久久久久久中文字幕无码软件 | 精品国模一区二区三区 | 中文天堂国产最新 |