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

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.mzph.cn/news/600768.shtml

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

相关文章

SRS服务器RTMP2WebRTC外网拉流配置

将前端服务开放到外网,并且在外网使用WebRTC拉流,要求全部使用同一端口。 外网地址:10.172.59.42(域名:test.com)外网端口为33333内网SRS服务器地址:192.168.5.177,内网端口为10090…

算法训练day60|单调栈part0

参考:代码随想录 84.柱状图中最大的矩形 要求当前柱形的左右两边第一个比他小的位置 对于高度为5的柱子(index为2) mid 他的左边第一个比他小的柱子为1,index为1 left 他的右边第一个比他小的柱子高度为2,index为4…

待做事项提醒 项目

GitHub - kesin/taskover: Taskover is a simple planlist tools to manage your task easily. app-version - APP 版本管理系统 源码地址:https://github.com/xtTech/app-version/ 考试答题:https://gitee.com/beautiful-life/exam 追风考试系统 vu…

【sed学习】sed -i和sed -i -e有什么区别

前言: 项目脚本有句sed -i $aPRODUCT_PACKAGES rtk_mdnsd device.mk sed -i -e $a/vendor/bin/ipv4lld u:object_r:ipv4lld_exec:s0 sepolicy/file_contexts不太清楚sed -i和sed -i -e有什么区别,学习一下 sed -i 和 sed -i -e 是用于编辑文件中匹配模式…

GB∕T 33171-2016 城市交通运行状况评价规范

免登陆免积分下载地址 标准号:GB/T 33171-2016 中文标准名称:城市交通运行状况评价规范 英文标准名称:Specification for urban traffic performance evaluation 中国标准分类号(CCS)R85 国际标准分类号(…

提前终止 Lambda forEach 的两种方法

在Java中,Lambda表达式提供了一种简便的方式来对集合进行迭代处理。然而,有时我们可能希望在特定条件下提前终止forEach的执行。这篇博客将介绍两种实现这一目标的方法。 方法一:使用异常 我们可以通过在Lambda表达式中抛出自定义异常的方式…

软件测试|SQL中的null值,该如何理解?

深入理解SQL中的Null值:处理缺失数据的重要概念 简介 Null值在SQL中是用于表示缺失或未知数据的特殊值。本文将深入探讨Null值的概念、处理方法和注意事项,以帮助读者更好地理解和处理SQL中的缺失数据。 在SQL数据库中,Null值是一种特殊的…

gitlab高级功能之Kubernetes Agent介绍

文章目录 1. 前置条件2. 简介3. GitLab Kubernetes Agent 的部署3.1 启用 Agent 服务端3.2 创建 Agent 配置和清单仓库 4. 安装agent4.1 连接k8s集群4.2 在集群中部署4.3 修改资源清淡,调整pod的副本数 5. 思考 1. 前置条件 gitlab 14.5 专业版k8s集群helm客户端工…

xadmin-plus

python之Xadmin-plus是什么? xadmin-plus: xadmin的django3.2版本支持。 Xadmin是一个非常优秀的Django Admin插件,可惜的是已经停止更新。Xadmin-plus对其进行了升级兼容。支持python3.10、Django3.2。 特性 Django Admin直接替换基于Twitter Boots…

uniapp存储讲解

在 Uni-app 中,你可以使用本地缓存来存储应用程序的数据。Uni-app 提供了两种本地缓存方式:uni.setStorageSync 和 uni.setStorage。其中,uni.setStorageSync 同步方式存储数据,适合小数据量的存储;而 uni.setStorage …

uniapp 跨页面传参的几种方式

当我们在开发Uni-app应用时,经常会遇到需要在不同页面之间传递参数的情况。为了实现跨页面传参,Uni-app提供了以下几种方式: URL传参:这是一种简单且常用的方式。在跳转页面时,可以通过在URL中添加参数来传递数据。目…

Docker 发布自定义镜像到公共仓库

Docker 发布自定义镜像到公共仓库 引言 Docker 是一种轻量级、便携式的容器化技术,可以使应用程序在不同环境中更加可移植。在本文中,我们将学习如何使用 Docker 从公共仓库拉取 Nginx 镜像,定制该镜像,添加自定义配置文件&…

【Redis端口】通过修改端口一个计算机上可以运行两个redis

一个计算机上可以运行多个Redis实例。每个Redis实例都会监听一个特定的端口,所以只要确保每个实例使用的端口不冲突,就可以在同一台计算机上运行多个Redis实例。例如,你可以配置一个Redis实例监听6379端口,另一个Redis实例监听638…

卫星时钟服务器、NTP时钟服务器、GPS北斗网络时钟系统

卫星时钟服务器、NTP时钟服务器、GPS北斗网络时钟系统 卫星时钟服务器、NTP时钟服务器、GPS北斗网络时钟系统 卫星时钟服务器、NTP时钟服务器、GPS北斗网络时钟系统 应用背景 根据人民银行第2012年第8期《金融业信息安全风险提示》建议大力推广采用能够接收GPS和北斗时钟源信号…

Linux内核--进程管理(六)内核进程管理几种CPU调度策略

目录 一、引言 二、CPU调度的直观想法 ------>2.1、FIFO ------>2.2、Priority ------>2.3、调度矛盾 三、各种CPU调度算法 ------>3.1、FCFS(First Come,First Served) ------>3.2、SJF(Short Job First,短作业优先) ------>3.3、RR算法(按时间片…

Java-变量类型-分类

1 需求 2 接口 3 示例 public class RunoobTest {// 成员变量private int instanceVar;// 静态变量private static int staticVar;public void method(int paramVar) {// 局部变量int localVar 10;// 使用变量instanceVar localVar;staticVar paramVar;System.out.println(…

Pytest——Fixture夹具的使用

一、什么是Fixture 在测试开展的过程中,会需要考虑到测试前的准备工作,以及测试后的释放操作行为。这些在Pytest中,会通过Fixture的方式来实现。如果说在运行pytest的测试用例的时候,需要调用一些数据来实现测试行为,…

kubectl常用命令(主题篇)

上一篇是按照操作把全局性的命令给整理出来,但是在实际的使用中,经常需要对某一个主题进行操作,因此这一篇按照对应的主题进行一系列操作。 集群 查看集群基本信息 kubectl cluster-info namespace 命名空间 查看 kubectl get namespace k…

web3d-three.js场景设计器-TransformControls模型控制器

场景设计器-TransformControls 控制器 该控制器可以指定模型进入可控制模式-如图有三种控制方式 translate --移动模式 rotate -- 旋转模式 scale -- 缩放模式 方便布局过程中快捷对模型进行摆放操作。 引入方式 import { TransformControls } from three/examples/jsm/…

C# visual studio COM创建及调用

1.visual studuio操作 1.1visual Studio创建类库项目ClassLibrary1。 1.1.1ClassLibrary1项目Class1.cs内容如下: using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.T…