在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于RAW API的UDP客戶端設(shè)計

CHANBAEK ? 來源:木南創(chuàng)智 ? 作者:尹家軍 ? 2022-12-14 14:59 ? 次閱讀

前一節(jié)我們實(shí)現(xiàn)了基于RAW API的UDP服務(wù)器,在接下來,我們進(jìn)一步利用RAW API實(shí)現(xiàn)UDP客戶端。

1 UDP****協(xié)議簡述

UDP協(xié)議全稱是用戶數(shù)據(jù)報協(xié)議,在網(wǎng)絡(luò)中它與TCP協(xié)議一樣用于處理數(shù)據(jù)包,是一種無連接的協(xié)議。在OSI模型中,處于傳輸層,是IP協(xié)議的上層協(xié)議。UDP有不提供數(shù)據(jù)包分組、組裝和不能對數(shù)據(jù)包進(jìn)行排序的缺點(diǎn),也就是說,當(dāng)報文發(fā)送之后,是無法得知其是否安全完整到達(dá)的。

UDP協(xié)議的主要作用是將網(wǎng)絡(luò)數(shù)據(jù)流量壓縮成數(shù)據(jù)包的形式。一個典型的數(shù)據(jù)包就是一個二進(jìn)制數(shù)據(jù)的傳輸單位。每一個數(shù)據(jù)包的前8個字節(jié)用來包含報頭信息,剩余字節(jié)則用來包含具體的傳輸數(shù)據(jù)。

UDP報頭由4個域組成,其中每個域各占用2個字節(jié),具體如下:源端口號、目標(biāo)端口號、數(shù)據(jù)報長度、校驗(yàn)值。其數(shù)據(jù)結(jié)構(gòu)如下:

UDP協(xié)議使用端口號為不同的應(yīng)用保留其各自的數(shù)據(jù)傳輸通道。UDP和TCP協(xié)議正是采用這一機(jī)制實(shí)現(xiàn)對同一時刻內(nèi)多項(xiàng)應(yīng)用同時發(fā)送和接收數(shù)據(jù)的支持。數(shù)據(jù)發(fā)送一方(可以是客戶端或服務(wù)器端)將UDP數(shù)據(jù)包通過源端口發(fā)送出去,而數(shù)據(jù)接收一方則通過目標(biāo)端口接收數(shù)據(jù)。有的網(wǎng)絡(luò)應(yīng)用只能使用預(yù)先為其預(yù)留或注冊的靜態(tài)端口;而另外一些網(wǎng)絡(luò)應(yīng)用則可以使用未被注冊的動態(tài)端口。因?yàn)閁DP報頭使用兩個字節(jié)存放端口號,所以端口號的有效范圍是從0到65535。一般來說,大于49151的端口號都代表動態(tài)端口。

數(shù)據(jù)報的長度是指包括報頭和數(shù)據(jù)部分在內(nèi)的總字節(jié)數(shù)。因?yàn)閳箢^的長度是固定的,所以該域主要被用來計算可變長度的數(shù)據(jù)部分。數(shù)據(jù)報的最大長度根據(jù)操作環(huán)境的不同而各異。從理論上說,包含報頭在內(nèi)的數(shù)據(jù)報的最大長度為65535字節(jié)。不過,一些實(shí)際應(yīng)用往往會限制數(shù)據(jù)報的大小,有時會降低到8192字節(jié)。

UDP協(xié)議使用報頭中的校驗(yàn)值來保證數(shù)據(jù)的安全。校驗(yàn)值首先在數(shù)據(jù)發(fā)送方通過特殊的算法計算得出,在傳遞到接收方之后,還需要再重新計算。如果某個數(shù)據(jù)報在傳輸過程中被第三方篡改或者由于線路噪音等原因受到損壞,發(fā)送和接收方的校驗(yàn)計算值將不會相符,由此UDP協(xié)議可以檢測是否出錯。

2 UDP****客戶端設(shè)計

前面我們簡要的介紹了UDP協(xié)議及其數(shù)據(jù)報,接下來我們將考慮怎么實(shí)現(xiàn)基于UDP協(xié)議的客戶端。

首先,我們來看一看與UDP相關(guān)的API函數(shù),并對它們作一個初步的介紹,應(yīng)為我們需要使用它們來實(shí)現(xiàn)我們的應(yīng)用。函數(shù)及說明如下:

我們已經(jīng)了解了UDP服務(wù)器的實(shí)現(xiàn)步驟,接下來我們說明一下UDP客戶端的實(shí)現(xiàn)步驟。

首先,依然是創(chuàng)建一個新的UDP控制塊。

接下來,建立與服務(wù)器的連接,配置包括服務(wù)器的地址、端口等信息。

接下來,如果連接無問題,則注冊客戶端回調(diào)函數(shù)。與服務(wù)器端的實(shí)現(xiàn)一樣,其復(fù)雜程度與需要實(shí)現(xiàn)的功能相關(guān)。我們只是實(shí)現(xiàn)一個簡單UDP客戶端,所以我們向服務(wù)器發(fā)送固定的信息,收到回復(fù)后繼續(xù)發(fā)送對應(yīng)的信息。

最后,由于客戶端是對話的發(fā)起方,所以在注冊完回調(diào)函數(shù)后,客戶端要發(fā)起首次對話。

3 UDP****客戶端實(shí)現(xiàn)

對UDP服務(wù)器端的實(shí)現(xiàn),我們依然將器分為兩方面內(nèi)容:一是,UDP客戶端的初始化配置部分;二是,UDP客戶端的具體實(shí)現(xiàn)內(nèi)容,也就是回調(diào)函數(shù)的內(nèi)容。

首先實(shí)現(xiàn)UDP客戶端的初始化配置部分。定義新的UDP控制塊,連接到指定服務(wù)器的地址及端口,同樣由于我們的驗(yàn)證比較簡單我們采用回環(huán)服務(wù)器端口。然后注冊回調(diào)函數(shù),發(fā)起客戶端首次通訊。具體代碼如下:

1 /* UDP客戶端初始化配置 */
 2 void UDP_Client_Initialization(void)
 3 {
 4   ip_addr_t DestIPaddr;
 5   err_t err;
 6   struct udp_pcb *upcb;
 7   char data[]="This is a Client.";
 8  
 9   /* 設(shè)置服務(wù)器端的IP地址 */
10   IP4_ADDR( &DestIPaddr,udpServerIP[0],udpServerIP[1],udpServerIP[2],udpServerIP[3]);
11  
12   /* 創(chuàng)建一個新的UDP控制塊 */
13   upcb = udp_new();
14  
15   if (upcb!=NULL)
16   {
17     /* 服務(wù)器端地址、端口配置 */
18     err= udp_connect(upcb, &DestIPaddr, UDP_ECHO_SERVER_PORT);
19  
20     if (err == ERR_OK)
21     {
22       /* 注冊回調(diào)函數(shù) */
23       udp_recv(upcb, UDPClientCallback, NULL);
24       /**數(shù)據(jù)發(fā)送,第一次連接時客戶端發(fā)送數(shù)據(jù)至服務(wù)器端,發(fā)送函數(shù)中會遍歷查找源IP地址的配置,如果源IP地址未配置,則數(shù)據(jù)發(fā)送失敗。該處出現(xiàn)的問題在后面總結(jié)中提到了**/
25       UdpClientSendPacket(upcb,data);  
26     }
27   }
28 }

其次實(shí)現(xiàn)UDP客戶端的具體實(shí)現(xiàn)內(nèi)容。由于我們實(shí)現(xiàn)的簡單的響應(yīng)客戶端,所以我們只是給服務(wù)器回復(fù)相同的內(nèi)容。

1 /* 定義UDP客戶端數(shù)據(jù)處理回調(diào)函數(shù) */
 2 static void UDPClientCallback(void *arg,struct udp_pcb *upcb,struct pbuf *p,const ip_addr_t *addr,u16_t port)
 3 {
 4   udp_send(upcb, p);     //數(shù)據(jù)回顯
 5  
 6   pbuf_free(p);
 7 }
 8  
 9 /* 客戶端數(shù)據(jù)發(fā)送函數(shù) */
10 void UdpClientSendPacket(struct udp_pcb *upcb,char* data)
11 {
12   struct pbuf *p;
13  
14   /* 分配內(nèi)存空間 */
15   p = pbuf_alloc(PBUF_TRANSPORT,strlen((char*)data), PBUF_POOL);
16  
17   if (p != NULL)
18   {
19  
20     /* 復(fù)制數(shù)據(jù)到pbuf */
21     pbuf_take(p, (char*)data, strlen((char*)data));
22  
23     /* 發(fā)送數(shù)據(jù) */
24     udp_send(upcb, p);     //發(fā)送數(shù)據(jù)
25  
26     /* 釋放pbuf */
27     pbuf_free(p);
28   }
29 }

當(dāng)然,如果我們不想人云亦云的回復(fù)服務(wù)器,則可以編輯我們自己的數(shù)據(jù)包然后發(fā)送回去。所以我們想要實(shí)現(xiàn)復(fù)雜的應(yīng)用時,只需要重新編寫合適的回調(diào)函數(shù)就可以了!

4 、結(jié)論

我們完成了簡單的,基于RAW API的UDP客戶端,其本身并不復(fù)雜。同樣的我們使用網(wǎng)絡(luò)軟件測試其功能,我們在電腦上建立一個服務(wù)器端,然后通過我們這個客戶端去連接它。能夠進(jìn)行連接并發(fā)送接受數(shù)據(jù),說明我們這個客戶端的設(shè)計是符合要求的。

至此我們完成了UDP客戶端及服務(wù)器的實(shí)現(xiàn),后續(xù)我們將在次基礎(chǔ)上實(shí)現(xiàn)更為復(fù)雜的應(yīng)用。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1506

    瀏覽量

    62205
  • UDP
    UDP
    +關(guān)注

    關(guān)注

    0

    文章

    327

    瀏覽量

    34000
  • 客戶端
    +關(guān)注

    關(guān)注

    1

    文章

    290

    瀏覽量

    16724
  • RAW
    RAW
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    3815
收藏 人收藏

    評論

    相關(guān)推薦

    請問如何獲取遠(yuǎn)程客戶端的IP和端口號進(jìn)行UDP廣播?

    Gor UDP廣播,我們應(yīng)該如何知道消息是從哪里接收的?要實(shí)現(xiàn) recvfrom 函數(shù),我們需要知道客戶端的 IP 地址和端口號。您能建議可以使用 SDK 中的哪個 API 嗎?謝謝。
    發(fā)表于 07-16 08:02

    請教網(wǎng)絡(luò)傳輸中的奇怪問題:UDP傳輸有問題、TCP客戶端傳輸可行。

    STM32F407開發(fā)板上運(yùn)行《網(wǎng)絡(luò)實(shí)驗(yàn)4 RAW_TCP客戶端實(shí)驗(yàn)》。3.在電腦上PING開發(fā)板,PING通。4.在電腦上運(yùn)行《網(wǎng)絡(luò)助手》,發(fā)送的數(shù)據(jù),STM32F407開發(fā)板收到。STM32F407
    發(fā)表于 11-05 08:42

    TCPIP_UDP_Bind()阻止udp客戶端發(fā)送UDP數(shù)據(jù)包

    LoalAlxPoT上向上述客戶端發(fā)送數(shù)據(jù)時,客戶端將數(shù)據(jù)發(fā)送到遠(yuǎn)程設(shè)備。為什么客戶端設(shè)備在使用本地綁定時需要一個初始觸發(fā)器?我在這里做錯了什么?任何幫助將不勝感激! 以上來自于百度翻譯 以下為原文 case
    發(fā)表于 03-13 07:15

    請問ESP8266的UDP到底區(qū)不區(qū)分服務(wù)器和客戶端

    最近在用精英板做ATK-ESP8266模塊的實(shí)驗(yàn),看到:AT指令使用實(shí)例.pdf里說UDP傳輸不區(qū)分server或者client,而提供的例程里UDP測試也只是說UDP測試與TCP客戶端
    發(fā)表于 07-12 04:35

    如何獲取連接的UDP客戶端的遠(yuǎn)程MAC地址Harmony 1.09

    你好!我有兩個UDP服務(wù)器在運(yùn)行,并且想從TCP UDP堆棧中讀出連接的客戶端的遠(yuǎn)程MAC地址。在MLA TCP堆棧中,使用UDPSocketInfo[_MYUDP_Socket1]、..remoteNode.MACAddr.v
    發(fā)表于 11-01 12:28

    請問RN1810是否可以同時激活UDP客戶端UDP服務(wù)器或TCP客戶端

    。這已經(jīng)工作得很好了!在我的應(yīng)用程序中,我將部分使用UDP客戶端UDP服務(wù)器,使用“UDP廣播”(在我的例子中是ip 192.168.0.255),在另一個項(xiàng)目中,我想使用
    發(fā)表于 05-01 12:53

    API怎么創(chuàng)建客戶端會話結(jié)構(gòu)體?

    API創(chuàng)建客戶端會話結(jié)構(gòu)體
    發(fā)表于 03-30 06:56

    如何使用Socket實(shí)現(xiàn)UDP客戶端

    本教程介紹了如何利用socket 編程來實(shí)現(xiàn)一個 UDP 客戶端,與服務(wù)器進(jìn)行通信。與開發(fā) TCP 客戶端一樣,我們先將 socket 編程的流程列出來,然后給出具體的實(shí)例。
    發(fā)表于 03-30 07:39

    LWIP的RAW API UDP通信過程是如何實(shí)現(xiàn)的

    LWIP的主要特性有哪些?LWIP的RAW API UDP通信過程是如何實(shí)現(xiàn)的?
    發(fā)表于 11-01 06:53

    CSDN博客客戶端源碼

    CSDN博客客戶端源碼CSDN博客客戶端源碼CSDN博客客戶端源碼
    發(fā)表于 11-18 10:22 ?1次下載

    JAVA教程之UDP客戶端模型

    JAVA教程之UDP客戶端模型,很好的JAVA的資料,快來學(xué)習(xí)吧
    發(fā)表于 04-11 17:28 ?4次下載

    TCP回響客戶端RAW API接口

    TCP回響客戶端例程(RAW API)
    的頭像 發(fā)表于 07-05 00:31 ?3960次閱讀
    TCP回響<b class='flag-5'>客戶端</b>:<b class='flag-5'>RAW</b> <b class='flag-5'>API</b>接口

    網(wǎng)絡(luò)調(diào)試和串口調(diào)試集合UDP TCP客戶端和TCP服務(wù)器應(yīng)用程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是網(wǎng)絡(luò)調(diào)試和串口調(diào)試集合UDP TCP客戶端和TCP服務(wù)器應(yīng)用程序免費(fèi)下載。
    發(fā)表于 08-30 08:00 ?16次下載
    網(wǎng)絡(luò)調(diào)試和串口調(diào)試集合<b class='flag-5'>UDP</b> TCP<b class='flag-5'>客戶端</b>和TCP服務(wù)器<b class='flag-5'>端</b>應(yīng)用程序免費(fèi)下載

    基于RAW APIUDP服務(wù)器設(shè)計

    前面我們已經(jīng)完成了LwIP協(xié)議棧基于邏輯的基本移植,在這一節(jié)我們將以RAW API來實(shí)現(xiàn)UDP服務(wù)器。
    的頭像 發(fā)表于 12-14 14:56 ?1180次閱讀
    基于<b class='flag-5'>RAW</b> <b class='flag-5'>API</b>的<b class='flag-5'>UDP</b>服務(wù)器設(shè)計

    基于LwIP的TCP客戶端設(shè)計

    上一篇我們基于LwIP協(xié)議棧的RAW API實(shí)現(xiàn)了一個TCP服務(wù)器的簡單應(yīng)用,接下來一節(jié)我們來實(shí)現(xiàn)一個TCP客戶端的簡單應(yīng)用。
    的頭像 發(fā)表于 12-14 15:12 ?2318次閱讀
    基于LwIP的TCP<b class='flag-5'>客戶端</b>設(shè)計
    主站蜘蛛池模板: 色爱区综合激情五月综合激情 | 成 人色 网 站 欧美大片在线观看| 亚洲不卡在线播放| 欧美系列在线播放| 女bbbbxxxx另类亚洲| 美女喷白浆视频| 视频在线精品| 亚洲最大的成网4438| 五月天男人的天堂| 69er小视频| 国产香蕉75在线播放| 国产成人精品高清在线| 精品一区视频| 欧美爽爽爽爽爽爽视频| 四虎影院黄色| 午夜免费看片| 亚洲人成人| 四虎精品永久在线网址| 欧美亚洲综合在线观看| 国产做a爰片久久毛片| 亚洲午夜精品久久久久久抢| 欧美成人午夜片一一在线观看| 性欧美丰满xxxx性久久久| 日本不卡免费高清视频| 视频一区在线观看| 91福利视频免费| 国产在线99| 天堂视频在线视频观看2018| 日本免费成人| 国产三级日产三级日本三级| 午夜短视频| 免费在线观看视频| 资源新版在线天堂| 日本三级三级三级免费看| 国内精品久久久久影| 天天操天天干天天插| 免费看欧美理论片在线| abc119影院成人免费看| 亚洲v在线| 黄色大片a级| a天堂资源在线观看|