物联网之轻量级TCP/IP协议栈——Lwip

2023-05-16

简介

Lwip为轻量级的Tcp/IP协议栈,对于嵌入式设备资源比较友好,占用RAM低,基本上物联网wifi芯片都会集成此协议栈到SDK中,其位于OSI的网路层往上。熟悉socket编程的能够很快上手进行网络通信编程。

编程使用

TCP

TCP为面向连接的通信方式,只有客户端与服务端建立连接后才能进行正常通信,且具有响应与误包重发机制,对于消息传输准确性比较高的时候可以使用此方式,当然这些机制保障提高数据通信准确性的同时,传输的速度与效率就会有所降低,对于实时大数据传输比较不友好。其整个通信过程如同打电话,如下过程:

            A 要打电话给 B ,那么必须要知道B的电话号码,这个号码就如果TCP连接中的服务端IP与端口号,
            拨通电话必须需要此时的B在电话前面监听电话的到来,否则肯定是打不通的,这类似TCP通信服务端的监听IP与某个端口号是否有客户端的连接
            假设此时B在电话前面,且正常拿起了电话接听,那么这个通信就已经正常连接了,此后就可以进行数据传输了。

头文件调用:
#include <lwip/inet.h>
#include <lwip/sockets.h>

TCP服务端:

          1、创建SOCKET
                 server_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); 
          2、绑定IP与端口
                struct sockaddr_in saddr;
                saddr.sin_family  = AF_INET;
                saddr.sin_port   = htons(50000);  ///主机字节转化为网络字节 短整型,网络字节时大端
                saddr.sin_addr.s_addr = htonl(INADDR_ANY); ///主机字节转化为网络字节 短整型
                bind(server_fd, (struct sockaddr *)&saddr, sizeof(struct sockaddr_in));//绑定
          3、监听
                listen(server_fd, 1);//连接的最大数量
          4、等待连接
                socklen = sizeof(saddr);
                client_fd = accept(server_fd, (struct sockaddr *)&saddr, &socklen);
           5、读写
                recv(client_fd, rev_buf, sizeof(rev_buf), 0);
                send(client_fd, send_buf, sizeof(send_buf), 0);

TCP客户端:

              1、创建SOCKET
                 client_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); 
               2、连接服务端
                char *server_ip_str = "127.0.0.1";
                int  server_port = 60000;
                struct sockaddr_in server_addr;
                server_addr.sin_addr.s_addr = inet_addr(server_ip_str);	
                server_addr.sin_family = AF_INET;
	        server_addr.sin_port = htons(server_port);
                connect(client_fd ,(struct sockaddr*)&server_addr,sizeof(server_addr));
               3、读写
                 recv(client_fd, rev_buf, sizeof(rev_buf), 0);
                 send(client_fd, send_buf, sizeof(send_buf), 0);

UDP

udp发送消息不保证消息是否发送成功,不需要与服务端进行连接,只要给定IP与端口号直接发送。如同快递,寄件人只要知道收件人的地址即可,至于这个邮件是否能成功邮寄到收件人手中受具体的环境因素影响。不过UDP对于实时通信比较友好,没有应答等机制资源消耗,对于即时通信一般都是在UDP的基础上加上一层数据的校验协议。

 1、创建socket
       udp_fd= socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); 
 2、绑定
       如tcp
 3、接收
       rev    
       rev_from   可以获得发送者的ip等信息
 4、发送
      sendto       在send基础上加一个 struct sockaddr_in server_addr参数,即需要发送的对象IP与端口信息
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

物联网之轻量级TCP/IP协议栈——Lwip 的相关文章

  • CMakeList.txt在大型文件应用(以前端为例)

    基本的CMakeLists txt并不难 xff0c 主要有生成库 生成执行文件 链接二者以及找库find package 找头文件include directories 生成执行文件add executable 链接库和执行文件targe
  • opencv - viz 画出SLAM轨迹

    原文在这里 数据集格式为 xff1a 时间 43 平移 43 旋转矩阵四元数 include lt opencv2 opencv hpp gt include lt fstream gt include lt iostream gt inc
  • PnP(3D-2D)、ICP(3D-3D)

    前言 xff1a 之前学习总结 视觉SLAM十四讲 总结过 xff1a 7 xff1a VO 3D 2D xff1a PnP 43 BA 8 xff1a VO 3D 3D xff1a ICP 43 SVD 43 BA 区别 xff1a 1
  • 通过solvePnP求解相机位置 (代码可运行)

    目录 一 Opencv函数使用 二 目标是求得相机在世界坐标系下的3D坐标 1 法一 xff1a 2 法二 xff1a 3 法1附录源代码 xff08 可运行通过 xff09 一 Opencv函数使用 solvePnP原型为 xff1a b
  • swagger页面配置正常,常用的浏览器无法显示!

    就是浏览器缓存的原因 xff0c 你清一下浏览器的缓存就好了 xff0c 就这么简单 是浏览器缓存的原因 xff0c 你清一下浏览器的缓存就好了 xff0c 就这么简单 浏览器缓存的原因 xff0c 你清一下浏览器的缓存就好了 xff0c
  • VINS-Mono 论文解读(IMU预积分残差+Marg边缘化)

    目录 VIO引出原因 xff1a 融合方案 xff1a 本文贡献 xff1a 0 总体框架 0 1 数据预处理 xff08 IMU预积分见标题1 xff09 0 2 初始化 A 滑动窗口 Sliding Window 纯视觉SfM B 视觉
  • 牛客网C++刷题要点

    1 虚函数 不要在构造函数和析构函数中调用虚函数 下面说说原理 xff1a 假如基类有个虚函数 那么编译器会为其创建虚函数表vtbl 并在对象的内存空间创建虚函数指针vptr 虚函数表的原理是每个类会在里面有自己的所能调用到的虚函数地址 对
  • 3D检测入门 - KITTI数据集

    参考链接 官网 xff1a http www cvlibs net datasets kitti index php 传感器介绍 xff1a http www cvlibs net datasets kitti setup php 相机内外
  • 请多多指教

    我是菜鸟 xff0c 还请各位大虾多多指教 xff01
  • VINS-DUAL 测试(小觅相机)

    设置小觅相机参数 直接从小觅相机内部获取各种参数 xff0c 把小觅相机给的SDK编译好后 xff0c 找到以下路径中生成的可执行文件 MYNT EYE D SDK samples output bin 直接执行下面两个文件 xff1a g
  • VINS-FUSION 研究日志 (3)进入 estimator.cpp Part A

    继续碎碎念梳理VINS FUSION 上一篇博文梳理了整个程序的入口 xff0c 其实只是做了传感器参数的读取与配置 xff0c 传感器测量数据的订阅 两件事情 estimator cpp 中有一个持续运行的线程 xff0c 是在 void
  • “Failed to get convolution algorithm. This is probably because cuDNN failed to initialize”错误的解决办法

    最近在使用TF2 0 运行程序出现以下错误 Failed to get convolution algorithm This is probably because cuDNN failed to initialize 一开始怀疑是CUDA
  • Linux多线程调用ubus导致死锁问题

    测试组发现用户进程在某种特定情况下 xff0c 会出现死锁 xff0c 现象是进程还在S状态 xff0c 但没有任何反应 xff0c 所以怀疑死锁 问题复现 通过几次测试发现 xff0c 进程中设置的参数恢复出厂后重启进程很大概率会出现死锁
  • Hi3559AV100 HDMI转MIPI-CSI LT6911UXC转换芯片调试

    Hi3559AV100项目 xff0c 需要接HDMI 4K摄像头 xff0c 需要把HDMI转成MIPI CSI信号接入CPU xff0c 从而实现信号的转换和实现 我们拿到的海思开发板是HI3559A4SDMEB VER A xff0c
  • 电脑抓wifi空中包三种方法

    WIN10电脑 下载wireshark软件 xff0c 设置WIFI网卡为monitor模式 xff1a C WINDOWS system32 gt cd Npcap C Windows System32 Npcap gt WlanHelp
  • 简述TCP的三次握手过程

    TCP握手协议 在TCP IP协议中 TCP协议提供可靠的连接服务 采用三次握手建立一个连接 第一次握手 xff1a 建立连接时 客户端发送syn包 syn 61 j 到服务器 并进入SYN SEND状态 等待服务器确认 xff1b SYN
  • buildroot使用外部编译链编译bluez蓝牙工具

    在开发ublox w263 wifi蓝牙时 xff0c 之前是使用yocto系统集成编译出的bluez工具 xff0c 减少了自己编译工具软件和依赖库的工作 xff0c 切换项目使用原生linux系统后 xff0c 所以的软件需要自己编译
  • 软件替代硬件HW_RANDOM随机数解决方案

    问题背景 使用低成本平台方案时 xff0c 发现不支持HW RANDOM硬件随机数 xff0c 这样在开启wifi wpa2加密ap后 xff0c 电脑多次提示连接失败才连接成功 xff0c 很影响用户体验 硬件不支持硬件随机数那么就需要使
  • Android下打印出现read: Unexpected EOF!分析

    背景 xff1a 在抓SmePlayer打印时 xff0c 打开debug级别后 xff0c xshell终端就嘟嘟响然后打印出几百行后就打出read Unexpected EOF 结束了 这时候完全没有抓到我需要的打印 xff0c 用lo
  • VMWare中处理器和内存配置含义

    背景 在创建虚拟机系统后 xff0c 默认处理器配置都是为1 xff0c 内存一般选为1G xff0c 然而在使用Linux系统编译大型软件时 xff0c 速度慢耗时较长 xff0c 这时候就需要调整一下处理器和内存配置 xff0c 使得计

随机推荐

  • Linux mkfs.ext4命令参数使用

    命令使用 mkfs ext4 参数 设备 参数说明 c 格式化前检查分区是否有坏块 Checking for bad blocks read only test 19 34 done 0 21 elapsed 0 0 0 errors Ch
  • Xshell 6多个会话窗口消失只能显示一个问题解决

    背景 某一天同事操作了我的Xshell导致我的会话窗口消失只能显示一个 xff0c 通过点击选项卡排列可以显示出消失的窗口 xff0c 但是使用极为不方便 xff0c 下面问题解决 解决 正常显示 xff1a 有三个选项窗口 异常显示 xf
  • OpenWrt学习(一)搭建Linux开发环境

    环境 目前大部分的 linux开发都是在PC虚拟机上进行的 xff0c 所采用的 linux系统版本有 Ubuntu Redhat Debian Fedora 等 xff0c 我们一般在 windows 操作系统上利用 VMware 43
  • OpenWrt学习(三)源码大包编译

    编译大包 make V 61 99 xff0c V 61 99 用来生成编译过程的详细信息 xff0c 方便查找出错原因 xff0c 或者用V 61 s 建议加 j x xff08 x 为CPU core数量 xff09 选项 xff0c
  • Linux gcc自带检测内存泄漏工具asan

    背景 排查和检测内存泄漏的问题时 xff0c 需要选择一些好用的工具 xff0c 由于dmalloc编译复杂 xff0c valgrind依赖太多 xff0c 所以选择使用gcc自带检测内存泄漏工具asan xff0c 版本4 8之后就支持
  • Linux物理内存较少导致OOM问题分析

    背景 开发项目过程中 xff0c 发现盒子启动后物理内存持续的减少 xff0c CMA内存过了一段时间后也出现明显减少情况 xff0c 到最后会低概率性的出现OOM杀掉进程的情况 xff1b 通过ps命令监控所有进程在开机后的虚拟内存VSZ
  • BaseService --- service层的抽取

    service层的抽取和dao层的抽取差不多相同 xff0c 主要不同点是dao实例化的问题 xff0c 需要在调用时传入 xff0c 并在BaseServiceImpl接收 详细的过程说明请参考dao层的抽取 dao层的抽取 xff1a
  • 数据分析思维之用户标签

    文章目录 1 什么是标签 xff1f 2 用户标签有什么用 xff1f 3 用户标签的制作流程4 用户标签的4大常见问题4 1 没有目标 xff0c 盲目打标4 2 不区分时间状态4 3 行为动机乱归因4 4 结果缺少检验 1 什么是标签
  • 看你能坚持读几本书?!——三十本互联网必看书籍

    写在前面 一直想整理个书单 xff0c 譬如关于EA 企业架构 ABCD 人工智能 大数据 云计算 设备 逻辑 思维 沟通 影响力 领导力 管理 绩效 胜任力 战略 商业方面的书单 xff0c 这里看到了一篇整理的比较好的书单 经过简单编辑
  • Docker学习之安装docker-compose命令(采用Python-pip命令安装)

    Docker学习之安装docker compose命令 采用Python pip命令安装 本机系统环境介绍Docker Compose简介使用Python pip命令进行安装第一步 环境检查第二步 安装Python pip第三步 安装doc
  • ros 下面如何通过vrpn 连接 Optitrack

    tracking system 可以实时的计算出来regid body 的pose xff0c 如何在ros 下面得到 这个pose 呢 xff1f 首先 编译安装 vrpn 然后的话需要配置两台电脑的IP 使他们能够 互相 ping 通
  • kalman滤波器各项参数及矩阵的设置

    参考博客 xff1a https blog csdn net baimafujinji article details 50646814 简单来说 xff0c 卡尔曼滤波器的实现是一个迭代过程 xff0c 使用上一次的结果预测当前的值 xf
  • python_tweets.json (python数据挖掘入门与实践数据集下载)

    最近在看python数据挖掘入门与实践一书 xff0c 书不错 xff0c 有个不好的地方是 xff0c 书上所用的数据集 xff0c 有几个测试数据在网上非常不好找 下面几个资源是我自己整理出来的 xff0c 上传到CSDN xff0c
  • ubuntu20.04_ROS中运行gazebo控制机器人模型报错

    1 无法启动类型为 controller manager spawner 的节点 xff1a controller manager ERROR cannot launch node of type controller manager sp
  • Fast Planner——代码解读参考资料整理

    1 地图部分 1 1 EGO Swarm代码解读 地图部分 参数解读 主要函数解读 1 2 EGO Swarm代码阅读笔记之GridMap类 1 3 EGO PLANNER代码阅读 xff08 地图部分 xff09 1 4 欧几里得距离转换
  • FreeRTOS 10.4.3在RISCV(T-HEAD C906)平台上移植过程

    好记性不如烂笔头 记录点滴移植经历 一方面便于总结提炼 二是分享 让别人少走有些弯路 自己以后踩坑了也爬的利索点 首先梳理一下移植框架 FreeRTOS还是非常简单的 体量上要比RT Thread Nuttx等偏重型的系统轻量不少 这可能也
  • Web服务器CGI的配置

    Web服务器CGI的配置 CGI程序运行在Web服务器端 xff0c Web服务器可以是Apache Nginx等 GGI程序可以是Python Ruby Perl Shell C C 43 43 等 配置 apache默认加载cgi模块
  • 解决mac安装homebrew后报错-bash: brew: command not found

    参照官网上很简单的一句安装命令 xff0c usr bin ruby e 34 curl fsSL https raw githubusercontent com Homebrew install master install 34 安装完
  • 转行的辛苦

    我是2004年毕业的 xff0c 学的专业是市场营销 xff0c 毕业后来到深圳 xff0c 换了很多工作 xff0c 一直都无法找到令自己满意的工作 因为我非常喜欢计算机 xff0c 从中学到大学 xff0c 一直是班级里公认的计算机高手
  • 物联网之轻量级TCP/IP协议栈——Lwip

    简介 Lwip为轻量级的Tcp IP协议栈 xff0c 对于嵌入式设备资源比较友好 xff0c 占用RAM低 xff0c 基本上物联网wifi芯片都会集成此协议栈到SDK中 xff0c 其位于OSI的网路层往上 熟悉socket编程的能够很