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

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > udp編程步驟詳解,就是如此的簡單

udp編程步驟詳解,就是如此的簡單 時間:2018-07-19      來源:未知

UDP協議是User Datagram Protocol的簡稱,是一種無連接的協議,每個數據報都是一個獨立的信息,包括完整的源地址或目的地址,它在網絡上以任何可能的路徑傳往目的地,因此能否到達目的地,到達目的地的時間以及內容的正確性都是不能被保證的。

既然有了保證可靠傳輸的TCP協議,為什么還要非可靠傳輸的UDP協議呢?主要的原因有兩個。一是可靠的傳輸是要付出代價的,對數據內容正確性的檢驗必然占用計算機的處理時間和網絡的帶寬,因此TCP傳輸的效率不如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、關閉網絡連接;

服務器端程序:

#include

#include

#include

#include

#include

#include

#include

#include

#define N 256

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

{

// 0定義變量

int serverfd;

int nbytes; //獲取接收到數據字節數

struct sockaddr_in serveraddr, clientaddr;

char buf[N];

int addrlen = sizeof(struct sockaddr_in);

if(argc < 3){

puts("server ");

return -1;

}

// 1創建UDP套接字--socket

serverfd = socket(AF_INET, SOCK_DGRAM, 0);

if(serverfd < 0){

perror("socket err");

return -1;

}

// 2定義套接字地址--sockaddr_in

bzero(&serveraddr, addrlen);

serveraddr.sin_family = AF_INET;

serveraddr.sin_port = htons(atoi(argv[2]));

serveraddr.sin_addr.s_addr = inet_addr(argv[1]);

// 3綁定套接字--bind

if(bind(serverfd, (struct sockaddr*)&serveraddr, addrlen) < 0){

perror("bind err");

return -1;

}

while (1) {

// 4接受來自客戶端消息 recvfrom

recvfrom(serverfd, buf, N, 0, (struct sockaddr*)&clientaddr, &addrlen);

printf("recv data = %s\n", buf);

// 5回發給客戶端 sendto

sendto(serverfd, "hello", 6, 0, (struct sockaddr*)&clientaddr, addrlen);

}

// 6關閉套接字--close

close(serverfd);

}

客戶端程序:

#include

#include

#include

#include

#include

#include

#include

#include

#define N 256

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

{

// 0定義變量

int clientfd;

struct sockaddr_in serveraddr;

char buf[N] = {0};

int addrlen = sizeof(struct sockaddr_in);

if(argc < 3){

puts("client ");

return -1;

}

// 1創建UDP套接字--socket

clientfd = socket(AF_INET, SOCK_DGRAM, 0);

if(clientfd < 0){

perror("socket err");

return -1;

}

// 2指定服務器地址--sockaddr_in

bzero(&serveraddr, addrlen);

serveraddr.sin_family = AF_INET;

serveraddr.sin_port = htons(atoi(argv[2]));

serveraddr.sin_addr.s_addr = inet_addr(argv[1]);

while (1) {

// 3發送消息給服務器 sendto

gets(buf);

sendto(clientfd, buf, N, 0, (struct sockaddr*)&serveraddr, addrlen);

// 4接收服務器的消息 recvfrom

recvfrom(clientfd, buf, N, 0, (struct sockaddr*)&serveraddr, &addrlen);

printf("%s\n", buf);

}

// 5關閉套接字--close

close(clientfd);

}

上一篇:activity工作流,這里讓你快速了解

下一篇:lseek()函數的原型及使用方法,超詳細

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

回到頂部

主站蜘蛛池模板: 成人禁片又硬又粗太爽了 | 麻豆产精国品一二三产区区 | 高清精品一区二区三区 | 精品人妻一区二区三区综合部 | 在线播放亚洲第一字幕 | 亚洲AV综合AV成人小说 | 日本毛片高清免费视频 | 岳好紧好湿夹太紧了好爽 | 又粗又大又黄又爽的免费视频 | 在线视频观看成人 | 成年男女免费视频在线观看不卡 | 欧美激情欧美狂野欧美精品 | 黄色影视在线观看 | 强壮公的侵犯让我次次高潮 | 在线看毛片的网站 | 激情国产在线 | 亚洲av无码成h人动漫在线观看3d | 18禁裸乳无遮挡啪啪无码免费 | 免费观看国产美女裸体视频 | 精品乱码一区内射人妻无码 | 欧美丰满熟妇乱XXXXX图片 | 一边捏奶头一边高潮视频 | 日本一道综合久久aⅴ免费 老司机福利在线观看视频 最新合集 国产专区 | 99国产欧美久久久精品蜜芽 | 国产挤奶水主播在线播放 | 久久久久亚洲AV色欲AV | 宅男午夜成年影视在线观看 | 啊灬灬用力灬嗯灬3p黑人 | 精品国产人妻一区二区三区 | 亚洲中文久久精品无码1 | 久久99国产综合精合精品 | 亚洲午夜精品A片久久WWW慈禧 | 2021乱码精品1区2区3区 | 免费看无码毛视频成片 | 成人影院免费在线观看 | 亚洲av网址在线观看 | 亚洲av人无码激艳猛片 | 最爱高潮全过程免费的视频 | 中文无码精品a∨在线 | 波多野结衣连续高潮中出 | 找老女人泻火对白自拍 |