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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取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

    文章

    1499

    瀏覽量

    61961
  • UDP
    UDP
    +關注

    關注

    0

    文章

    325

    瀏覽量

    33931
  • 客戶端
    +關注

    關注

    1

    文章

    290

    瀏覽量

    16683
  • RAW
    RAW
    +關注

    關注

    0

    文章

    21

    瀏覽量

    3800
收藏 人收藏

    評論

    相關推薦

    請問如何獲取遠程客戶端的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 ?3932次閱讀
    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 ?1145次閱讀
    基于<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 ?2272次閱讀
    基于LwIP的TCP<b class='flag-5'>客戶端</b>設計
    主站蜘蛛池模板: 亚洲欧美一区二区三区久久| 国产亚洲va在线电影| 美女爽到嗷嗷嗷叫| 亚洲色播永久网址大全| 国产毛多水多高潮高清| 日韩欧美一区二区三区在线| 9久久99久久久精品齐齐综合色圆 9久高清在线不卡免费无吗视频 | 国产精品久久vr专区| 青青伊人网| JizzJizzJizz亚洲成年| 蜜桃成熟时2在线观看完整版hd| 野花日本完整版在线观看免费高清| 国产曰韩无码亚洲视频| 无人区在线日本高清免费| 姑娘日本大全免费观看版中文翻译| 日本bbwhd| 成年免费三级视频| 日本高清色片| 纯肉高H啪短文合集| 日韩精品a在线视频| 成人免费小视频| 色播成人影院| 国产97视频在线观看| 天天操夜夜噜| 国产亚洲精品香蕉视频播放| 亚洲精品自在在线观看| 精品人妻无码一区二区三区蜜桃臀| 亚洲欧美韩国综合色| 久久91精品国产91久久户| 樱花之恋动漫免费观看| 绝逼会被锁| 992交通广播| 欧美日韩一级黄色片| 成人国产AV精品久久久久| 日韩欧美一区二区三区在线| 国产精品久久免费视频| 午夜想想爱午夜剧场| 国产在线伊人| 一抽一出BGM免费3分钟| 邻居的阿2中文字版电影| 99精品视频|