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

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

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

物聯(lián)網(wǎng)LWIP之socket編程

撞上電子 ? 2024-01-18 08:00 ? 次閱讀

一,基礎(chǔ)概念在我看來Socket就相當(dāng)于API,就是函數(shù)接口,我們使用Socket就可以在不清楚底層原理的基礎(chǔ)上進行通信,即Socket會幫助我們處理好網(wǎng)絡(luò)的Ip地址等。下圖就清晰地展示了Socket的位置,作為用戶層與其他層的交互媒介。

a5be4792-b594-11ee-aa22-92fbcf53809c.png

LWIP實現(xiàn)Socket需要操作系統(tǒng)的幫助,如下圖所示。

a5c23e38-b594-11ee-aa22-92fbcf53809c.png

二,Socket編程的基礎(chǔ)知識

1.大端模式,小端模式

(1)大端模式就是尾端為高地址(先取低地址)

a5d9f3d4-b594-11ee-aa22-92fbcf53809c.png

(2)小端模式就是尾端為低地址(先取高地址)

a5de32c8-b594-11ee-aa22-92fbcf53809c.png

2.地址轉(zhuǎn)換接口

Socket編程中會有特定的函數(shù)來處理IP地址,我們用戶可以直接省略判斷ip地址是大端還是小端,這個轉(zhuǎn)換接口會自己判斷地址存儲方式并轉(zhuǎn)換。

1.htonl與htons區(qū)別《大小端》host —— to —— net——l :主機字節(jié)變?yōu)榫W(wǎng)絡(luò)字節(jié),字節(jié)為大端模式host —— to —— net——s :主機字節(jié)變?yōu)榫W(wǎng)絡(luò)字節(jié),字節(jié)為小端模式
2.htonl與ntohl區(qū)別《主轉(zhuǎn)網(wǎng),網(wǎng)轉(zhuǎn)主》u_long b = htonl(a);//將主機字節(jié)的unsigned long轉(zhuǎn)為網(wǎng)絡(luò)字節(jié)順序(32位)u_long b = ntohl(a);//將網(wǎng)絡(luò)字節(jié)順序(32位)轉(zhuǎn)為主機字節(jié)//def.h 地址轉(zhuǎn)換接口uint32_t htonl(uint32_t hostlong);uint16_t htons(uint16_t hostshort);uint32_t ntohl(uint32_t netlong);uint16_t ntohs(uint16_t netshort);

3.IP地址轉(zhuǎn)換

(1)socket接口

//socket.hint inet_pton(int af, const char *src, void *dst);const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);

(2)LWIP接口

//inet.h#define inet_addr(cp) ipaddr_addr(cp)#define inet_aton(cp, addr) ip4addr_aton(cp, (ip4_addr_t*)addr)#define inet_ntoa(addr) ip4addr_ntoa((const ip4_addr_t*)&(addr))#define inet_ntoa_r(addr, buf, buflen) ip4addr_ntoa_r((const ip4_addr_t*)&(addr), buf, buflen)

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

    關(guān)注

    2894

    文章

    43305

    瀏覽量

    366389
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3521

    瀏覽量

    93266
  • LwIP
    +關(guān)注

    關(guān)注

    2

    文章

    84

    瀏覽量

    26932
收藏 人收藏

    評論

    相關(guān)推薦

    什么是聯(lián)網(wǎng)技術(shù)?

    什么是聯(lián)網(wǎng)技術(shù)? 聯(lián)網(wǎng)技術(shù)(Internet of Things, IoT)是一種通過信息傳感設(shè)備,按約定的協(xié)議,將任何物體與網(wǎng)絡(luò)相連接,實現(xiàn)智能化識別、定位、跟蹤、監(jiān)管等功能的
    發(fā)表于 08-19 14:08

    socket的基本概念和原理

    Socket是一種通信協(xié)議,用于在網(wǎng)絡(luò)中實現(xiàn)進程間的通信。它是一種抽象的編程接口,允許應(yīng)用程序通過網(wǎng)絡(luò)發(fā)送和接收數(shù)據(jù)。 1. 什么是Socket? Socket是一種端點,用于在網(wǎng)絡(luò)中
    的頭像 發(fā)表于 08-16 10:51 ?455次閱讀

    簡述socket編程中的常用函數(shù)

    Socket編程是一種基于TCP/IP協(xié)議的網(wǎng)絡(luò)編程技術(shù),它允許應(yīng)用程序通過網(wǎng)絡(luò)進行通信。在Socket編程中,有許多常用的函數(shù),它們用于創(chuàng)
    的頭像 發(fā)表于 08-16 10:49 ?152次閱讀

    如何理解socket編程接口

    Socket編程接口是一種網(wǎng)絡(luò)編程的基本概念,它提供了一種在不同計算機之間進行通信的方法。 Socket編程接口的基本概念 1.1
    的頭像 發(fā)表于 08-16 10:48 ?219次閱讀

    RTOS SDK中的socket怎么正確使用?

    sockaddr_in(我已包含頭文件sockets.h)。在sockets.h中發(fā)現(xiàn)要定義宏 LWIP_SOCKET 為真,才能讓該結(jié)構(gòu)體定義生效,但在lwipopts.h中定義該宏以后還是不行,同時發(fā)現(xiàn)似乎SDK中lwip頭文件包含路徑有些問題。 請問rtos s
    發(fā)表于 07-22 07:05

    esp8266的freertos+lwip不支持在多個任務(wù)中創(chuàng)建多個不同的socket嗎?

    socket fd。也就是說每個socket都是在各自的任務(wù)中創(chuàng)建、讀寫和close的,按照道理應(yīng)該是互相獨立的,但是為啥會互相影響? 難道樂鑫的esp8266的freertos+lwip不支持在多個任務(wù)中創(chuàng)建多個不同的
    發(fā)表于 07-11 07:29

    基于MM32F5270的Ethernet實現(xiàn)LwIP協(xié)議棧移植

    LwIP是輕量化的TCP/IP協(xié)議,由瑞典計算機科學(xué)院(SICS)的Adam Dunkels 開發(fā)的一個小型開源的TCP/IP協(xié)議棧。LwIP具有高度可移植性、代碼開源,提供了三種編程接口(API):RAW API、NETCON
    的頭像 發(fā)表于 06-21 10:28 ?883次閱讀
    基于MM32F5270的Ethernet實現(xiàn)<b class='flag-5'>LwIP</b>協(xié)議棧移植

    請問使用lwip創(chuàng)建socket,該如何做到非阻塞的接收發(fā)送數(shù)據(jù)?

    請問使用lwip創(chuàng)建socket,該如何做到非阻塞的接收發(fā)送數(shù)據(jù)?
    發(fā)表于 06-19 06:02

    RTOS+LwIP Socket不工作的原因?

    _Server(void const * argument) { /* LwIP 初始化棧 */ MX_LWIP_Init(); for(;;) { Tcp_Socket_Serve_Init(); osDelay
    發(fā)表于 04-30 07:20

    STM32H743ZIT6調(diào)試FreeRTOS + LWIP,有什么辦法能將socket設(shè)置為非堵塞方式?

    大家好, 我們現(xiàn)在用STM32H743ZIT6,在調(diào)試FreeRTOS + LWIP,發(fā)現(xiàn)SOCKET為堵塞方式,有什么辦法能將socket設(shè)置為非堵塞方式?用setsockopt函數(shù)設(shè)置,已經(jīng)測試過了,不起作用;大神們幫看下,
    發(fā)表于 04-26 08:14

    使用FreeRTOS+LwIP+emWin,LwIP使用socket-udp功能,收發(fā)數(shù)據(jù)丟包非常嚴重是怎么回事?。?/a>

    請教下使用FreeRTOS+LwIP+emWin,LwIP使用socket-udp功能,收發(fā)數(shù)據(jù)丟包非常非常嚴重,是怎么回事啊 ? 單片機使用 F7x 相關(guān)宏定義如下: #define
    發(fā)表于 04-24 07:28

    lwip可以開幾個socket

    的內(nèi)存和處理器資源,以適應(yīng)資源受限的嵌入式應(yīng)用場景。 在lwIP中,socket是一種用于進行網(wǎng)絡(luò)通信的抽象概念。它提供了一種簡化的編程接口,使得應(yīng)用程序可以通過網(wǎng)絡(luò)發(fā)送和接收數(shù)據(jù)。lwIP
    的頭像 發(fā)表于 01-09 14:05 ?1530次閱讀

    rt-thread源碼分析socket抽象層和網(wǎng)卡注冊

    如圖所示,rt-thread的網(wǎng)絡(luò)分為應(yīng)用層、sal_socket、netdev、協(xié)議簇(at、lwip、wiznet)、網(wǎng)卡驅(qū)動五層。
    的頭像 發(fā)表于 11-13 12:43 ?659次閱讀

    Socket 網(wǎng)絡(luò)編程框架介紹

    Socket 網(wǎng)絡(luò)編程框架 Socket(套接字)是一個網(wǎng)絡(luò)編程概念,描述了一個通信端點(Endpoint),用于建立網(wǎng)絡(luò)連接(Connection)并傳輸數(shù)據(jù)。 Linux Kern
    的頭像 發(fā)表于 11-09 14:19 ?853次閱讀
    <b class='flag-5'>Socket</b> 網(wǎng)絡(luò)<b class='flag-5'>編程</b>框架介紹

    聯(lián)網(wǎng)專業(yè)前景怎么樣?

    聯(lián)網(wǎng)專業(yè)前景怎么樣? 聯(lián)網(wǎng)專業(yè)在當(dāng)今技術(shù)發(fā)展迅速的背景下具有廣闊的前景。以下是聯(lián)網(wǎng)專業(yè)的
    發(fā)表于 10-20 09:48