久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> STM32 >> 瀏覽文章

Rainbow網(wǎng)絡(luò)通信:UDP實(shí)現(xiàn)的Echo服務(wù)器

作者:白櫟旸   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年04月30日   【字體:

    在《網(wǎng)絡(luò)通信:通過(guò)UDP發(fā)送數(shù)據(jù)》一文中,我們對(duì)在Rainbow總進(jìn)行UDP通信有了初步認(rèn)識(shí),今天我們將分析一下UDP接收數(shù)據(jù),并實(shí)現(xiàn)一個(gè)Echo服務(wù)器的功能:客戶端通過(guò)UDP發(fā)送過(guò)來(lái)的數(shù)據(jù),服務(wù)器原封不動(dòng)地回傳過(guò)去。

 
   其實(shí),做UDP接收也同樣簡(jiǎn)單,在進(jìn)行網(wǎng)絡(luò)初始化,設(shè)置了UDP監(jiān)聽(tīng)端口后,只需要調(diào)用UDP.parsePacket(),如果返回值大于零,表明有數(shù)據(jù)發(fā)送過(guò)來(lái),可以進(jìn)行接收操作,如:使用UDP.read()可以從UDP接收到的數(shù)據(jù)包中讀取一個(gè)字節(jié)的數(shù)據(jù),UDP.readString()可以讀取接收到的字符串,當(dāng)然還有更多豐富的讀寫操作方法。實(shí)際上UDP是Stream的子類,Stream中所有對(duì)流進(jìn)行操作的函數(shù)都可以使用。對(duì)c++比較熟悉的人可以參考Stream.cpp、Stream.h中的定義和實(shí)現(xiàn)。
 
    在軟件包的“Projects\UDP-Echo”文件夾包含了本文的完整工程,可以直接編譯、燒寫和調(diào)試。這個(gè)程序主要展示如何實(shí)現(xiàn)UDP-Echo服務(wù)器,看看main.cpp的代碼:
#include "WProgram.h"
#include "Ethernet.h"
#include "EthernetUDP.h"
 
//網(wǎng)絡(luò)模塊的MAC地址
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//網(wǎng)絡(luò)模塊的IP地址
IPAddress ip(192, 168, 1, 15);
 
//定義UDP對(duì)象
EthernetUDP UDP;
 
void setup()
{
    //初始化Rainbow
    boardInit();
    //初始化默認(rèn)串口
    Serial.begin();
    Serial.println("UDP-Echo start...");
    //對(duì)網(wǎng)絡(luò)進(jìn)行初始化
    Ethernet.begin(mac, ip);
    //UDP監(jiān)聽(tīng)端口
    UDP.begin(6000);
}
 
void loop()
{
    //判斷是否接收到UDP數(shù)據(jù)包
    if(UDP.parsePacket() > 0)
    {
        //打印出對(duì)方的ip和端口
        Serial.print("from:");
        Serial.print(UDP.remoteIP());
        Serial.print(":");
        Serial.println(UDP.remotePort());
 
        //向?qū)Ψ綄?shù)據(jù)發(fā)送回去
        UDP.beginPacket();
        int c = UDP.read();
        while(c > 0)
        {
            UDP.write(c);
            c = UDP.read();
        }
        //換行
        UDP.println();
        UDP.endPacket();
    }
}
 
int main()
{
    setup();
    while(1) loop();
}
 
    上面的程序非常簡(jiǎn)單,首先通過(guò)UDP.parsePacket()的返回值判斷又可以發(fā)送給服務(wù)器的UDP數(shù)據(jù)包,如果有數(shù)據(jù)包,就將對(duì)方的ip和端口通過(guò)串口輸出,然后通過(guò)UDP.read()接收UDP數(shù)據(jù),并將所有的數(shù)據(jù)通過(guò)UDP.write()寫入到要發(fā)送的UDP數(shù)據(jù)包中,并發(fā)送給對(duì)方。
 
    上面的程序編譯無(wú)誤后,將程序燒寫到Rainbow中,然后在電腦上運(yùn)行串口調(diào)試工具并和Rainbow連接成功,啟動(dòng)UDP監(jiān)聽(tīng),可以在串口調(diào)試工具中看到輸出的日志,通過(guò)UDP向Rainbow發(fā)送“Hello,world!”,在調(diào)試工具中立刻會(huì)接收到我們開(kāi)始發(fā)送的信息:
關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 一色桃子av一区二区 | 福利二区| 国产成人免费在线 | 日韩精品一区二区三区在线观看 | 国产一级一级 | 亚洲精品久久区二区三区蜜桃臀 | 视频在线亚洲 | 中文字幕亚洲区一区二 | 久视频在线观看 | 亚洲精品一区二区三区蜜桃久 | 亚洲欧美日韩电影 | 国产精品999 | 日韩亚洲一区二区 | 亚洲精品在线观看视频 | 久久99精品久久 | 国产欧美在线 | 高清视频一区二区三区 | 欧美在线一二三 | 国产成人av在线 | 日本三级精品 | 国产精品不卡 | 亚洲精品一区久久久久久 | 免费精品在线视频 | av手机免费在线观看 | 五月免费视频 | 国产在线观看不卡一区二区三区 | 国产aⅴ精品| 国产精品久久国产精品久久 | 久久综合九色综合欧美狠狠 | 久久只有精品 | av网站在线免费观看 | 日韩在线视频免费观看 | av黄色在线 | 国产91丝袜在线播放 | 欧美福利影院 | 亚洲欧美国产视频 | 91大神在线看 | 国产精品99| 日本成人在线观看网站 | 日韩久久中文字幕 | aaa在线 |