亚洲精品一二区_国产黄色片网站_99久久久成人国产精品_蜜臀网_国产精品一区二区三区免费_成人av中文字幕_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號

回到頂部

主站蜘蛛池模板: 日本三级香港三级妇三 | 国产欧美日韩精品第三区 | 欧美午夜在线 | 日本中文字幕在线观看 | 久久久久久久一线毛片 | 国产成人久久精品激情91 | 久操视频在线免费观看 | 久久久久久久一线毛片 | 日韩在线观看不卡 | 国产成人青青热久免费精品 | 欧美中文字幕一二三四区 | 国产精亚洲视频 | 男女交性高清视频无遮挡 | 人人成人免费公开视频 | 欧美激情一区二区三区视频高清 | 国内精品手机在线观看视频 | 国产精品亚洲专区在线播放 | 国产性色视频在线高清 | 激情五月宗合网 | 久久这里只有精品9 | 国产亚洲片 | 青青青亚洲精品国产 | 毛片视 | 欧美精品久久久久久久影视 | 日本精品在线观看视频 | 久久机热这里只有精品 | 欧美亚洲自拍偷拍 | 欧美a一片xxxx片 | 香蕉视频一区 | 免费日本网站 | 亚洲开心网| 亚洲天堂国产 | 韩国一级在线观看 | 韩国免费人成在线观看网站 | 99免费精品视频 | 欧美日皮视频 | 日本黄色不卡视频 | 国产一起色一起爱 | 国产页| 99精品这里只有精品高清视频 | 久久久久久久久久久福利 |