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

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

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

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

基于MM32F3270以太網(wǎng)Server使用

jf_pJlTbmA9 ? 來源:靈動MM32MCU ? 作者:靈動MM32MCU ? 2023-09-27 15:46 ? 次閱讀

前面重點對Client的創(chuàng)建方式及使用方式進行了介紹,本節(jié)通過Server實驗對TCP通信過程進行一次介紹。

在TCP/IP協(xié)議中,傳輸層及以下層的機制是由內(nèi)核提供的。應(yīng)用層由用戶提供,應(yīng)用層程序?qū)νㄐ艛?shù)據(jù)進行解析處理,傳輸層及以下層處理通信的細節(jié)(將數(shù)據(jù)從一端傳入另外一端)。應(yīng)用層數(shù)據(jù)通過協(xié)議棧發(fā)送到網(wǎng)絡(luò)上時,每層協(xié)議都要增加一個數(shù)據(jù)部首(header),進行一次封裝。其中不同的協(xié)議層對數(shù)據(jù)包有不同的稱謂,在傳輸層叫段(segment),在網(wǎng)絡(luò)層叫做數(shù)據(jù)報(datagram),在鏈路層稱為幀(frame)。

poYBAGIB1SeAe163AAENFx_I-OI592.png
pYYBAGIB1SmAORngAAFqBTr68c8819.png

在通信過程中,發(fā)送端執(zhí)行以下動作:首先程序進行編碼,確定通信的建立連接、發(fā)送數(shù)據(jù)的時間。接著建立TCP連接,TCP根據(jù)應(yīng)用指示負責(zé)建立連接、發(fā)送數(shù)據(jù)及斷開連接。TCP首部包括源端口號和目標(biāo)端口號、序號和校驗和,加完首部后數(shù)據(jù)包繼續(xù)往下傳遞到IP層,IP層加上IP首部包括地址等信息用于尋址操作,之后將數(shù)據(jù)繼續(xù)往下傳遞附加數(shù)據(jù)鏈路層首部。最后發(fā)送時的分組數(shù)據(jù)包會加上以太網(wǎng)包尾(用于循環(huán)冗余校驗)。

主機端:收到數(shù)據(jù)包后會在以太網(wǎng)數(shù)據(jù)包中找到MAC地址,判斷是否為自己的數(shù)據(jù)包,如果不是則丟棄。如果是傳遞給IP層處理,以此類推,不斷往上傳遞到TCP層。在TCP層通過校驗和判斷數(shù)據(jù)是否損壞,然后檢查是否按序號接收數(shù)據(jù),最后檢查端口號。處理完成這一切后數(shù)據(jù)包繼續(xù)往上層發(fā)送,即應(yīng)用層。如果出現(xiàn)主機空間已滿等情況,主機則會發(fā)送“處理異常”通知發(fā)送端。

poYBAGIB1SuAPknaAADy7PNlu3M323.png

實驗使用MB-039開發(fā)板,在工程中使用LwIP+FreeRTOS,實驗展示如何制作一個TCP Server,并收發(fā)數(shù)據(jù),實驗使用到的硬件如下:

poYBAGIB1SyAHYynAAG39uXw7q0489.png

如圖是MB-039(完整原理圖可以通過MM32官網(wǎng)下載)的ETH部分。

各個信號引腳對應(yīng)如下:

pYYBAGIB1S6AEqaVAAAOapdym_Y980.png
poYBAGIB1TGAFwREAAi12qR49zc411.png

在進行Server實驗前,我們先了解需要使用到的API

1)netconn_bind ()

2)netconn_listen ()

3)netconn_accept ()

以下分API展開介紹:

01、netconn_bind ()

從源碼中可以看出其主要功能:為conn(服務(wù)器端)綁定地址與端口號。

err_t netconn_bind(struct netconn* conn, const ip_addr_t* addr, u16_t port)
{
    API_MSG_VAR_DECLARE(msg);
    err_t err;

    LWIP_ERROR("netconn_bind: invalid conn", (conn != NULL), return ERR_ARG;);
#if LWIP_IPV4
    /* Don't propagate NULL pointer (IP_ADDR_ANY alias) to subsequent functions */
    if (addr == NULL) {
        addr = IP4_ADDR_ANY;
    }
#endif /* LWIP_IPV4 */
#if LWIP_IPV4    LWIP_IPV6
    if ((netconn_get_ipv6only(conn) == 0)   
            ip_addr_cmp(addr, IP6_ADDR_ANY)) {
        addr = IP_ANY_TYPE;
    }
#endif /* LWIP_IPV4    LWIP_IPV6 */
    API_MSG_VAR_ALLOC(msg);
    API_MSG_VAR_REF(msg).conn = conn;
    API_MSG_VAR_REF(msg).msg.bc.ipaddr = API_MSG_VAR_REF(addr);
    API_MSG_VAR_REF(msg).msg.bc.port = port;
    err = netconn_apimsg(lwip_netconn_do_bind,  API_MSG_VAR_REF(msg));
    API_MSG_VAR_FREE(msg);
    return err;
}

02、netconn_listen ()

netconn_listen指向的函數(shù)是:netconn_listen_with_backlog,作用:使服務(wù)器進入監(jiān)聽狀態(tài),等待遠端的連接請求。

err_t netconn_listen_with_backlog(struct netconn* conn, u8_t backlog)
{
#if LWIP_TCP
    API_MSG_VAR_DECLARE(msg);
    err_t err;

    /* This does no harm. If TCP_LISTEN_BACKLOG is off, backlog is unused. */
    LWIP_UNUSED_ARG(backlog);

    LWIP_ERROR("netconn_listen: invalid conn", (conn != NULL), return ERR_ARG;);

    API_MSG_VAR_ALLOC(msg);
    API_MSG_VAR_REF(msg).conn = conn;
#if TCP_LISTEN_BACKLOG
    API_MSG_VAR_REF(msg).msg.lb.backlog = backlog;
#endif /* TCP_LISTEN_BACKLOG */
    err = netconn_apimsg(lwip_netconn_do_listen,  API_MSG_VAR_REF(msg));
    API_MSG_VAR_FREE(msg);
    return err;
#else /* LWIP_TCP */
    LWIP_UNUSED_ARG(conn);
    LWIP_UNUSED_ARG(backlog);
    return ERR_ARG;
#endif /* LWIP_TCP */
}

03、netconn_accept ()

netconn_accept(代碼較長,這里不進行粘貼)用于TCP服務(wù)器中,等待著遠端主機的連接請求,并且建立一個新的TCP連接,在調(diào)用這個函數(shù)之前需要通過調(diào)用 listen()函數(shù)讓服務(wù)器進入監(jiān)聽狀態(tài)。accept()函數(shù)的調(diào)用會阻塞應(yīng)用線程直至與遠程主機建立TCP連接。參數(shù)addr是一個返回結(jié)果參數(shù),它的值由accept()函數(shù)設(shè)置,其實就是遠程主機的地址與端口號等信息,當(dāng)新的連接已經(jīng)建立后,遠端主機的信息將保存在連接句柄中,能夠標(biāo)識連接對象。

了解了以上3個API,我們開始創(chuàng)建Server工程:

static void server(void* thread_param)
{
    struct netconn* conn, *newconn;
    err_t err;
    LWIP_UNUSED_ARG(arg);

#if LWIP_IPV6
    conn = netconn_new(NETCONN_TCP_IPV6);
    netconn_bind(conn, IP6_ADDR_ANY, LOCAL_PORT);         
#else /* LWIP_IPV6 */
    conn = netconn_new(NETCONN_TCP);               //①
    netconn_bind(conn, IP_ADDR_ANY, LOCAL_PORT);      //②
#endif /* LWIP_IPV6 */
    LWIP_ERROR("tcpecho: invalid conn", (conn != NULL), return;);

    printf("The local port number is%dnn", LOCAL_PORT);
    netconn_listen(conn);                              //③
    while (1) {
        err = netconn_accept(conn,  newconn);         //④
        if (err == ERR_OK) {
            struct netbuf* buf;
            void* data;
            u16_t len;

            while ((err = netconn_recv(newconn,  buf)) == ERR_OK) {    //⑤
                do {
                    netbuf_data(buf,  data,  len);
                    err = netconn_write(newconn, data, len, NETCONN_COPY);  //⑥
                } while (netbuf_next(buf) >= 0);
                netbuf_delete(buf);                 //⑦
            }
            netconn_close(newconn);         //⑧
            netconn_delete(newconn);        //⑨
        }
    }
}

1、申請一個連接結(jié)構(gòu),指定參數(shù)是NETCONN_TCP,即TCP連接

2、綁定本地的IP地址與端口號

3、使TCP服務(wù)器進入監(jiān)聽狀態(tài)

4、處理客戶端的連接請求,當(dāng)只有當(dāng)有客戶端發(fā)送連接請求的時候才會處理,否則將進入阻塞態(tài),而客戶端的信息保存在newconn連接結(jié)構(gòu)中

5、接收數(shù)據(jù),并裝填進buf

6、對接收的數(shù)據(jù)進行轉(zhuǎn)發(fā)(指定為不拷貝方式NETCONN_COPY)

7、釋放數(shù)據(jù)空間

8、主動關(guān)閉客戶端的連接

9、釋放newconn空間

到這里已經(jīng)完成了工程的創(chuàng)建,看一下PC的IP地址,設(shè)備需要處于同一網(wǎng)段,以方便測試。

打開命令行窗口輸入:ipconfig

pYYBAGIB1TOARaWcAAEnlBhO5H8936.png

PC的地址為:192.168.105.34,在sys_arch.h文件中對DEST_IP_ADDR0 、DEST_IP_ADDR1、DEST_IP_ADDR2、DEST_IP_ADDR3進行修改,DEST_PORT 隨意修改。

#define LOCAL_PORT                 2021

#define IP_ADDR0                   192
#define IP_ADDR1                   168
#define IP_ADDR2                   105
#define IP_ADDR3                   21

將程序下載入開發(fā)板中,使用NetAssist進行如下設(shè)置:

1)協(xié)議設(shè)置,此時設(shè)備為Server,則PC為Client

2)設(shè)置遠程主機地址(即設(shè)備地址)

3)端口號

poYBAGIB1TWAfwKHAAFh4dn4s7g430.png

點擊連接,若提示連接失敗,則Ping一下開發(fā)板地址,可以正常Ping通則檢查端口號;如果無法Ping通則需要對工程進行檢查。

pYYBAGIB1TeAM8KxAAFz6nHccxA983.png

任意輸入字符進行發(fā)送。

pYYBAGIB1TmAADjoAAIx-OumLeg776.png

通過上圖可以觀察到發(fā)送成功,并且設(shè)備返回數(shù)據(jù)與發(fā)送數(shù)據(jù)一致,表明實驗成功。實驗程序請登錄我們的官網(wǎng)下載MM32F3270 SDK,工程路徑如下:~MM32F3270_Lib_Samples_V0.90Demo_appEthernet_DemoETH_RTOSFreertos_Server。

來源:靈動MM32MCU


審核編輯:湯梓紅

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

    關(guān)注

    40

    文章

    5590

    瀏覽量

    174966
  • 通信
    +關(guān)注

    關(guān)注

    18

    文章

    6182

    瀏覽量

    137418
  • Server
    +關(guān)注

    關(guān)注

    0

    文章

    94

    瀏覽量

    24561
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1398

    瀏覽量

    80455
收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    靈動微課堂 (第182講) | 基于MM32F3270 以太網(wǎng) Client_Socket使用

    :~\MM32F3270_Lib_Samples_V0.90\Demo_app\Ethernet_Demo\ETH_RTOS\Freertos_Client_socket下章的題目為《基于MM32F3270 以太網(wǎng)
    發(fā)表于 10-18 11:02

    靈動微課堂 (第185講) | 基于MM32F3270 以太網(wǎng) Client使用

    前面介紹了基于Socket方式的以太網(wǎng)通訊,接下來給大家介紹基于TCP包的通訊。內(nèi)容分為基于MM32F3270以太網(wǎng)Client的使用與基于MM32F3270
    發(fā)表于 10-18 11:21

    靈動微課堂 (第186講) | 基于MM32F3270 以太網(wǎng) Server使用

    :~\MM32F3270_Lib_Samples_V0.90\Demo_app\Ethernet_Demo\ETH_RTOS\Freertos_Server。我們下章的題目為《基于MM32F3270
    發(fā)表于 10-18 11:28

    MM32F3270系列32位MCU的特點有哪些

    上海靈動微電子推出全新主流型MM32F3270系列32位MCU,此款MM32F3270系列是基于M3內(nèi)核的32位微控制器,MM32F3270適用于要求高集成度的高性能控制領(lǐng)域,如:工業(yè)控制、消防監(jiān)控
    發(fā)表于 11-03 07:20

    靈動微電子MM32F3270系列MCU的特點介紹

    上海靈動微電子推出全新主流型MM32F3270系列32位MCU,此款MM32F3270系列是基于M3內(nèi)核的32位微控制器,MM32F3270適用于要求高集成度的高性能控制領(lǐng)域,如:工業(yè)控制、消防監(jiān)控
    發(fā)表于 03-22 16:57 ?2310次閱讀

    【國產(chǎn)MCU移植】MM32F3270 EVBoard

    【國產(chǎn)MCU移植】MM32F3270 EVBoard
    發(fā)表于 12-03 17:21 ?5次下載
    【國產(chǎn)MCU移植】<b class='flag-5'>MM32F3270</b> EVBoard

    基于MM32F3270 以太網(wǎng) Server使用

    前面重點對Client的創(chuàng)建方式及使用方式進行了介紹,本節(jié)通過Server實驗對TCP通信過程進行一次介紹。
    發(fā)表于 02-08 13:36 ?0次下載
    基于<b class='flag-5'>MM32F3270</b> <b class='flag-5'>以太網(wǎng)</b> <b class='flag-5'>Server</b>使用

    基于MM32F3270 以太網(wǎng) Client使用

    接下來給大家介紹基于TCP包的通訊。內(nèi)容分為基于MM32F3270以太網(wǎng)Client的使用與基于MM32F3270以太網(wǎng)Server的使用。
    發(fā)表于 02-08 15:10 ?0次下載
    基于<b class='flag-5'>MM32F3270</b> <b class='flag-5'>以太網(wǎng)</b> Client使用

    MM32F3270 ADC注入通道

    MM32F3270 ADC注入通道
    的頭像 發(fā)表于 09-27 15:59 ?1286次閱讀
    <b class='flag-5'>MM32F3270</b> ADC注入通道

    使用MM32F3270 FSMC驅(qū)動OLED

    使用MM32F3270 FSMC驅(qū)動OLED
    的頭像 發(fā)表于 09-27 15:30 ?1403次閱讀
    使用<b class='flag-5'>MM32F3270</b> FSMC驅(qū)動OLED

    基于MM32F3270以太網(wǎng)HTTP使用

    基于MM32F3270以太網(wǎng)HTTP使用
    的頭像 發(fā)表于 09-27 15:48 ?798次閱讀
    基于<b class='flag-5'>MM32F3270</b><b class='flag-5'>以太網(wǎng)</b>HTTP使用

    基于MM32F3270以太網(wǎng)Client使用

    基于MM32F3270以太網(wǎng)Client使用
    的頭像 發(fā)表于 09-27 15:44 ?949次閱讀
    基于<b class='flag-5'>MM32F3270</b><b class='flag-5'>以太網(wǎng)</b>Client使用

    基于MM32F3270以太網(wǎng)UDP使用

    基于MM32F3270以太網(wǎng) UDP使用
    的頭像 發(fā)表于 09-27 15:42 ?732次閱讀
    基于<b class='flag-5'>MM32F3270</b><b class='flag-5'>以太網(wǎng)</b>UDP使用

    基于MM32F3270以太網(wǎng)Server_Socket使用

    基于MM32F3270以太網(wǎng)Server_Socket使用
    的頭像 發(fā)表于 09-27 15:41 ?688次閱讀
    基于<b class='flag-5'>MM32F3270</b><b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>Server</b>_Socket使用

    基于MM32F3270以太網(wǎng)Client_Socket使用

    基于MM32F3270以太網(wǎng)Client_Socket使用
    的頭像 發(fā)表于 09-27 15:37 ?735次閱讀
    基于<b class='flag-5'>MM32F3270</b><b class='flag-5'>以太網(wǎng)</b>Client_Socket使用
    主站蜘蛛池模板: 资源在线www天堂 | 中文字幕三级久久久久久 | 色偷偷成人 | 日韩一级生活片 | 热久久综合这里只有精品电影 | 狠狠狠狠狠狠狠狠 | 欧美精品一二区 | 好吊色7777sao在线视频观看 | www.av在线.com | 好男人社区www在线观看 | 亚洲欧美v视色一区二区 | 久久久久国产精品免费网站 | 欧美成人午夜精品免费福利 | 求av网站| 免费jyzzjyzz在线播放大全 | 殴美一级 | 激情丁香网 | 一级毛片成人免费看a | 欧美爱爱网址 | 久久婷婷国产综合精品 | 两人性潮高免费视频看 | 好硬好大好爽女房东在线观看 | 国产视频一区二区在线观看 | 五月天激激婷婷大综合丁香 | 国产在线免 | 天天干天天爱天天操 | 欧美天堂视频 | 亚洲国产婷婷综合在线精品 | 伊人久久大香线蕉资源 | 99色婷婷| 在线免费一区 | 久久久精品免费热线观看 | 伊人久久综合成人网小说 | 亚洲精品色一区色二区色三区 | 狠狠色狠狠色综合日日不卡 | 天天干夜夜操视频 | 日本高清中文字幕在线观穿线视频 | 成熟妇女毛耸耸性视频 | 美女视频黄a视频免费全过程 | 人人看人人添人人爽 | 日韩精品系列产品 |