网络连接 UDP2,UDP Connect, bind, send, recieve认知, -入门8

news2024/11/15 4:01:05

LWIP编程接口有RAW, NETCONN, SOCKET
网络地址-入门3在这里插入图片描述

2.UDP函数的理解
#define UDP_SERVER_PORT 8000 //PC side
#define UDP_CLIENT_PORT 1234 // ctrl board side
//PC IP address
#define DEST_IP_ADDR0 192
#define DEST_IP_ADDR1 168
#define DEST_IP_ADDR2 3
#define DEST_IP_ADDR3 115

/* Create a new UDP control block */
upcb = udp_new();

if (upcb!=NULL)
{
/*assign destination IP address */
IP4_ADDR( &DestIPaddr, DEST_IP_ADDR0, DEST_IP_ADDR1, DEST_IP_ADDR2, DEST_IP_ADDR3 );

/* configure destination IP address and port */
   //?表示只接受指定地址来的信号?
err= udp_connect(upcb, &DestIPaddr, UDP_SERVER_PORT);

if (err == ERR_OK)
{
  err=udp_bind(upcb,IP_ADDR_ANY,UDP_CLIENT_PORT);
  if(err == ERR_OK)
  {
    /* Set a receive callback for the upcb */
    udp_recv(upcb, udp_receive_callback, NULL);          
  }
}

}
}
2.1,udp_connect,用来绑定接收
可以参考: https://blog.csdn.net/qjh5606/article/details/89608555?ops_request_misc=&request_id=&biz_id=102&utm_term=udp%E4%B8%ADconnect%E5%8F%82%E6%95%B0%E7%9A%84%E5%90%AB%E4%B9%89&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-89608555.142v99control&spm=1018.2226.3001.4187
a. 用来接收
特定地址
特定端口来的信息。 否则用SendTo函数。
b. 也可以提高通信效率
假如接收任何IP来的信息如下
/* configure destination IP address and port */
// err= udp_connect(upcb, &DestIPaddr, UDP_SERVER_PORT);
err = ERR_OK;
在UDP通信中,如果你只往一个地址发送,那么你也可以先connect指定地址,然后调用 send,recv
err= udp_connect(upcb, &DestIPaddr, UDP_SERVER_PORT);

tcp与udp的connect不同
UDP中connect操作与TCP中connect操作有着本质区别:

TCP中调用connect会引起三次握手,client与server建立连结
UDP中调用connect内核仅仅把对端ip&port记录下来.
UDP中可以多次调用connect,TCP只能调用一次connect

UDP多次调用connect有两种用途:1,指定一个新的ip&port连结. 2,断开和之前的ip&port的连结.
指定新连结,直接设置connect第二个参数即可.
断开连结,需要将connect第二个参数中的sin_family设置成 AF_UNSPEC即可.

UDP中使用connect可以提高效率的原因
普通的UDP发送两个报文内核做了如下:
#1:建立连结
#2:发送报文
#3:断开连结
#4:建立连结
#5:发送报文
#6:断开连结

采用connect方式的UDP发送两个报文内核如下处理:
#1:建立连结
#2:发送报文
#3:发送报文另外一点,
每次发送报文内核都由可能要做路由查询.

2.2, udp_bind,用来绑定发送目的地址
a. err=udp_bind(upcb,IP_ADDR_ANY,UDP_CLIENT_PORT);//绑定端口信息,
b.udp_sendto(upcb, p, &DestIPaddr,UDP_CLIENT_PORT);/指定发送的目标地址
c. udp_send(upcb, p); 假如没有Connect, 也没有Bind,就应该广播模式了

https://huaweicloud.csdn.net/63561d20d3efff3090b5acae.html?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-1-71616748-blog-83218773.235%5Ev40%5Epc_relevant_anti_vip_base&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-1-71616748-blog-83218773.235%5Ev40%5Epc_relevant_anti_vip_base&utm_relevant_index=1

udp服务器调用了bind()函数为服务器套接字绑定本地地址/端口,这样使得客户端的能知道它发数据的目的地址/端口,服务器如果单单接收客户端的数据,或者先接收客户端的数据(此时通过recvfrom()函数获取到了客户端的地址信息/端口)再发送数据,客户端的套接字可以不绑定自身的地址/端口,因为udp在创建套接字后直接使用sendto(),隐含操作是,在发送数据之前操作系统会为该套接字随机分配一个合适的udp端口,将该套接字和本地地址信息绑定。
但是,如果服务器程序就绪后一上来就要发送数据给客户端,那么服务器就需要知道客户端的地址信息和端口,那么就不能让客户端的地址信息和端口号由客户端所在操作系统分配,而是要在客户端程序指定了。怎么指定,那就是用bind()函数:

  1. UDP用的一些操作
    a. 设备,电脑 连接到Router,动态分配地址
    b. 开发板动态分配地址是192.168.3.110
    c. 电脑有线动态分配地址是192.168.3.115
    d. 开发板端口是1234, 电脑端口是8000

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1360735.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023-2024学年上学期算法设计与分析题期末考试模拟卷

2023-2024学年上学期算法设计与分析题期末考试模拟卷 文章目录 2023-2024学年上学期算法设计与分析题期末考试模拟卷单选题程序填空题输入格式:输出格式:输入样例1:输出样例1: 主观题 注意:该题集非标准答案,仅供参考,如果异议,请…

淘宝商品详情API接口(item_get-获得淘宝商品详情)主图,属性,sku,价格,搜索商品列表

淘宝开放平台提供了API接口,允许开发者获取淘宝商品的相关信息。为了获取商品详情,您可以使用 item_get API接口。以下是如何使用此API接口来获取商品的主图、属性、SKU、价格以及搜索商品列表的简要说明: 公共参数 名称类型必须描述keyStr…

SpringBoot Redis入门(一)——redis、Lettuce、Redisson使用

本章:将展示SpringBoot集成Redis三种客户端的配置要点和常见应用示例;下章:自行实现一个方法级的缓存注解,简化版的Cacheable,使初学者加深对Spring缓存框架的理解。 一、Lettuce客户端 Lettuce 是一种可扩展的、线程…

Java接口和抽象类的区别?

Java接口和抽象类的区别? Java接口和抽象类的含义: 接口(Interface): 含义: 接口是一种抽象类型,它定义了一组抽象方法,但不能包含具体实现。接口可以包含常量和默认方法&#xff0c…

机器学习模型超参数优化,最频繁使用的5个工具包

优化超参数始终是确保模型性能最佳的关键任务。通常,网格搜索、随机搜索和贝叶斯优化等技术是主要使用的方法。 今天分享几个常用于模型超参数优化的 Python 工具包,如下所示: scikit-learn:使用在指定参数值上进行的网格搜索或随…

HarmonyOS应用开发学习笔记 包名、icon图标,应用名修改 UIAbility组件介绍、UIAbility启动模式、UIAbility组件基本用法

目前HarmonyOS应用主推的是Stage模型开发 一、Stage模型基本概念 项目描述UIAbility组件UIAbility组件是一种包含UI界面的应用组件,主要用于和用户交互。例如,图库类应用可以在UIAbility组件中展示图片瀑布流,在用户选择某个图片后&#xf…

Mongodb启动客户端 并简单演示切换数据库

上文 window下载安装Mongodb数据库 我们简单搭起了Mongodb的服务 但是 我们还需要一个客户端 我们还是将服务端启动起来 mongod --dbpath..\data\db我们再以管理员身份运行一个终端 直接进入 Mongodb安装目录的bin下 然后启动客户端的命令是 mongo --host 服务ip --port 服务…

Android studio环境配置

1.搜索android studio下载 Android Studio - Download 2.安装 3.配置环境 配置gradle,gradle参考网络配置。最后根据项目需求选择不同的jdk。

将PPT4页并排成1页

将PPT4页并排成1页打印 解决方法: 方法一 在打印时选择: 打开 PPT,点击文件选项点击打印点击整页幻灯片点击4张水平放置的幻灯平页面就会显示4张PPT显示在一张纸上 方法二 另存为PDF: 打开电脑上的目标PPT文件,点击文件点击…

一种DevOpts的实现方式:基于gitlab的CICD(一)

写在之前 笔者最近准备开始入坑CNCF毕业的开源项目,看到其中有一组开源项目的分类就是DevOpts。这个领域内比较出名的项目是Argocd,Argo CD 是一个用于 Kubernetes 的持续交付 (Continuous Delivery) 工具,它以声明式的方式实现了应用程序的…

手把手带你手撕一个shell

🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:HEART BEAT—YOASOBI 2:20━━━━━━️💟──────── 5:35 🔄 ◀️ ⏸ ▶️ ☰ …

Underactuated Robotics - 欠驱动机器人学(一)- 全驱动与欠驱动系统

系列文章目录 前言 如今的机器人行动过于保守,只能完成机械性能所能完成的一小部分任务,实现一小部分性能。在某些情况下,我们仍然从根本上受限于在结构化工厂环境中成熟的刚性机械臂控制技术,在这种环境中,可以使用大…

cad快速看图软件免费版(手机在线cad快速看图)

cad快速看图软件免费版(手机在线cad快速看图) 很多机械设计师日常工作过程中涉及到多种格式的cad图纸,cad图纸大多都需要cad设计软件才能打开,然而很多小伙伴并没有下载相应的cad设计软件,这种情况下如何进行cad快速看图呢? 今天…

Chromedriver 下载和安装指南

1. 确定Chrome浏览器版本 首先,在谷歌浏览器中找到当前版本信息。 打开“设置”,点击“关于谷歌”即可看到版本号。确保后续下载的Chromedriver版本与Chrome浏览器版本一致。或者直接跳转网页地址:chrome://settings/help 2. 下载Chromedri…

告别2023,无论何年我都是最幸福的程序员。

序 2023年注定是不平凡的一年,有太多的意外,无论是工作还是家庭。唯一不变的是坚持,岁月的静好,离不开同事们的负重前行,作为一个程序员来说,我是幸运的,也是最幸福的。生活的漫漫长路&#xf…

Flask 会员列表展示

感谢编程浪子师傅的源码信息分享 web/controllers/member/Member.py # -*- coding: utf-8 -*- from flask import Blueprint,request,redirect,jsonify from common.libs.Helper import ops_render,iPagination,getCurrentDate,getDictFilterField,selectFilterObj from comm…

MongoDB数据类型详解

BSON 协议与数据类型 MongoDB 为什么会使用 BSON? JSON 是当今非常通用的一种跨语言 Web 数据交互格式,属 ECMAScript 标准规范的一个子集。JSON (JavaScript Object Notation,JS 对象简谱)即 JavaScript 对象表示法…

日程安排小程序实战教程

日常中我们经常有一些事情需要提醒自己,使用日历的形式比较符合实际的使用习惯。本篇我们就利用微搭低代码工具带着大家开发一款日程安排的小程序。 1 创建数据源 登录微搭低代码控制台,打开数据模型,点击创建 输入数据源的名称日程安排 …

vue封装组件(一)标签和下拉框组合实现添加数据

背景: 最近接入短剧内容,需要添加短剧合作方。在详情页需要支持添加组件 方案一:标签tag加上输入框实现添加数据。图片见下 这个是刚开始做的,后来产品觉得这样会造成随意修改数据,需要改成下拉框形式添加 方案二:标签…

【人工智能】深入了解人工智能的核心算法与应用实践

人工智能 学习AI要看的第一本书人工智能应当以人为本人工智能(第3版)通晓六点,明白人工智能是怎么回事基本概念和历史基础知识基于知识的系统高级专题现在和未来安全和编程 人工智能已经是基础学科 学习AI要看的第一本书 人工智能知识对于当…