色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于RAW API的UDP客戶端設計

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

前一節我們實現了基于RAW API的UDP服務器,在接下來,我們進一步利用RAW API實現UDP客戶端。

1 UDP****協議簡述

UDP協議全稱是用戶數據報協議,在網絡中它與TCP協議一樣用于處理數據包,是一種無連接的協議。在OSI模型中,處于傳輸層,是IP協議的上層協議。UDP有不提供數據包分組、組裝和不能對數據包進行排序的缺點,也就是說,當報文發送之后,是無法得知其是否安全完整到達的。

UDP協議的主要作用是將網絡數據流量壓縮成數據包的形式。一個典型的數據包就是一個二進制數據的傳輸單位。每一個數據包的前8個字節用來包含報頭信息,剩余字節則用來包含具體的傳輸數據。

UDP報頭由4個域組成,其中每個域各占用2個字節,具體如下:源端口號、目標端口號、數據報長度、校驗值。其數據結構如下:

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

數據報的長度是指包括報頭和數據部分在內的總字節數。因為報頭的長度是固定的,所以該域主要被用來計算可變長度的數據部分。數據報的最大長度根據操作環境的不同而各異。從理論上說,包含報頭在內的數據報的最大長度為65535字節。不過,一些實際應用往往會限制數據報的大小,有時會降低到8192字節。

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

2 UDP****客戶端設計

前面我們簡要的介紹了UDP協議及其數據報,接下來我們將考慮怎么實現基于UDP協議的客戶端。

首先,我們來看一看與UDP相關的API函數,并對它們作一個初步的介紹,應為我們需要使用它們來實現我們的應用。函數及說明如下:

我們已經了解了UDP服務器的實現步驟,接下來我們說明一下UDP客戶端的實現步驟。

首先,依然是創建一個新的UDP控制塊。

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

接下來,如果連接無問題,則注冊客戶端回調函數。與服務器端的實現一樣,其復雜程度與需要實現的功能相關。我們只是實現一個簡單UDP客戶端,所以我們向服務器發送固定的信息,收到回復后繼續發送對應的信息。

最后,由于客戶端是對話的發起方,所以在注冊完回調函數后,客戶端要發起首次對話。

3 UDP****客戶端實現

對UDP服務器端的實現,我們依然將器分為兩方面內容:一是,UDP客戶端的初始化配置部分;二是,UDP客戶端的具體實現內容,也就是回調函數的內容。

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

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   /* 設置服務器端的IP地址 */
10   IP4_ADDR( &DestIPaddr,udpServerIP[0],udpServerIP[1],udpServerIP[2],udpServerIP[3]);
11  
12   /* 創建一個新的UDP控制塊 */
13   upcb = udp_new();
14  
15   if (upcb!=NULL)
16   {
17     /* 服務器端地址、端口配置 */
18     err= udp_connect(upcb, &DestIPaddr, UDP_ECHO_SERVER_PORT);
19  
20     if (err == ERR_OK)
21     {
22       /* 注冊回調函數 */
23       udp_recv(upcb, UDPClientCallback, NULL);
24       /**數據發送,第一次連接時客戶端發送數據至服務器端,發送函數中會遍歷查找源IP地址的配置,如果源IP地址未配置,則數據發送失敗。該處出現的問題在后面總結中提到了**/
25       UdpClientSendPacket(upcb,data);  
26     }
27   }
28 }

其次實現UDP客戶端的具體實現內容。由于我們實現的簡單的響應客戶端,所以我們只是給服務器回復相同的內容。

1 /* 定義UDP客戶端數據處理回調函數 */
 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);     //數據回顯
 5  
 6   pbuf_free(p);
 7 }
 8  
 9 /* 客戶端數據發送函數 */
10 void UdpClientSendPacket(struct udp_pcb *upcb,char* data)
11 {
12   struct pbuf *p;
13  
14   /* 分配內存空間 */
15   p = pbuf_alloc(PBUF_TRANSPORT,strlen((char*)data), PBUF_POOL);
16  
17   if (p != NULL)
18   {
19  
20     /* 復制數據到pbuf */
21     pbuf_take(p, (char*)data, strlen((char*)data));
22  
23     /* 發送數據 */
24     udp_send(upcb, p);     //發送數據
25  
26     /* 釋放pbuf */
27     pbuf_free(p);
28   }
29 }

當然,如果我們不想人云亦云的回復服務器,則可以編輯我們自己的數據包然后發送回去。所以我們想要實現復雜的應用時,只需要重新編寫合適的回調函數就可以了!

4 、結論

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

至此我們完成了UDP客戶端及服務器的實現,后續我們將在次基礎上實現更為復雜的應用。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • API
    API
    +關注

    關注

    2

    文章

    1559

    瀏覽量

    63498
  • UDP
    UDP
    +關注

    關注

    0

    文章

    330

    瀏覽量

    34463
  • 客戶端
    +關注

    關注

    1

    文章

    297

    瀏覽量

    16988
  • RAW
    RAW
    +關注

    關注

    0

    文章

    21

    瀏覽量

    3972
收藏 0人收藏
  • 洛羽殇1

評論

相關推薦
熱點推薦

請問如何獲取遠程客戶端的IP和端口號進行UDP廣播?

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

請教網絡傳輸中的奇怪問題:UDP傳輸有問題、TCP客戶端傳輸可行。

STM32F407開發板上運行《網絡實驗4 RAW_TCP客戶端實驗》。3.在電腦上PING開發板,PING通。4.在電腦上運行《網絡助手》,發送的數據,STM32F407開發板收到。STM32F407
發表于 11-05 08:42

TCPIP_UDP_Bind()阻止udp客戶端發送UDP數據包

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

請問ESP8266的UDP到底區不區分服務器和客戶端

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

如何獲取連接的UDP客戶端的遠程MAC地址Harmony 1.09

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

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

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

API怎么創建客戶端會話結構體?

API創建客戶端會話結構體
發表于 03-30 06:56

如何使用Socket實現UDP客戶端

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

LWIP的RAW API UDP通信過程是如何實現的

LWIP的主要特性有哪些?LWIP的RAW API UDP通信過程是如何實現的?
發表于 11-01 06:53

CSDN博客客戶端源碼

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

JAVA教程之UDP客戶端模型

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

TCP回響客戶端RAW API接口

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

網絡調試和串口調試集合UDP TCP客戶端和TCP服務器應用程序免費下載

本文檔的主要內容詳細介紹的是網絡調試和串口調試集合UDP TCP客戶端和TCP服務器應用程序免費下載。
發表于 08-30 08:00 ?16次下載
網絡調試和串口調試集合<b class='flag-5'>UDP</b> TCP<b class='flag-5'>客戶端</b>和TCP服務器<b class='flag-5'>端</b>應用程序免費下載

基于RAW APIUDP服務器設計

前面我們已經完成了LwIP協議棧基于邏輯的基本移植,在這一節我們將以RAW API來實現UDP服務器。
的頭像 發表于 12-14 14:56 ?1392次閱讀
基于<b class='flag-5'>RAW</b> <b class='flag-5'>API</b>的<b class='flag-5'>UDP</b>服務器設計

基于LwIP的TCP客戶端設計

上一篇我們基于LwIP協議棧的RAW API實現了一個TCP服務器的簡單應用,接下來一節我們來實現一個TCP客戶端的簡單應用。
的頭像 發表于 12-14 15:12 ?2580次閱讀
基于LwIP的TCP<b class='flag-5'>客戶端</b>設計
主站蜘蛛池模板: 99re久久热最新地址一 | 超碰在线线公开免费视频 | 精品在线观看一区 | 床伴在线观看免费高清完整泰剧第四集 | 肉动漫h黄动漫日本免费观看 | 最近中文字幕mv手机免费高清 | 久久这里只精品热在线99 | 日本邪恶少女漫画大全 | 办公室的秘密2中文字幕 | 国产亚洲精品久久久999无毒 | 久久怡红院国产精品 | 高清午夜福利电影在线 | 日日夜夜天天操 | 米奇在线8888在线精品视频 | 亚洲AV蜜桃永久无码精品红樱桃 | 久久无码人妻AV精品一区 | 久久精品国产亚洲AV妓女不卡 | 国产日韩精品一区二区三区在线 | 51久久成人国产精品麻豆 | 动漫在线观看免费肉肉 | 色偷偷888欧美精品久久久 | 97精品国产亚洲AV高清 | 中文字幕一区二区视频 | 天天噜日日噜夜夜噜 | 国产精品爆乳尤物99精品 | 天天色天天综合网 | 成人国产亚洲欧美成人综合网 | 亚洲免费三区 | 久久香蕉电影 | 性女传奇快播 | 波多结衣一区二区三区 | 一本道久在线综合色姐 | 男女疯狂一边摸一边做羞羞视频 | 国产AV国片精品无套内谢无码 | 菠萝菠萝蜜在线观看视频 | 久久精品观看影院2828 | 久久婷婷五月免费综合色啪 | 漂亮妈妈中文字幕版 | 免费啪视频观试看视频 | 暖暖直播免费观看韩国 | 国产精品爽黄69天堂A片 |

電子發燒友

中國電子工程師最喜歡的網站

  • 2931785位工程師會員交流學習
  • 獲取您個性化的科技前沿技術信息
  • 參加活動獲取豐厚的禮品