网络连接 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.hqwc.cn/news/327596.html

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

相关文章

实验笔记之——服务器链接

最近需要做NeRF相关的开发,需要用到GPU,本博文记录本人配置服务器远程链接的过程,本博文仅供本人学习记录用~ 连上服务器 首先先确保环境是HKU的网络环境(HKU AnyConnect也可)。伙伴已经帮忙创建好用户(第一次登录会提示重新设置密码)。用cmd ssh链接ssh -p 60001 <u…

液体装载机

效果演示 实现了一个SVG动画效果&#xff0c;其中包含了一个线条、两个圆圈和一个虚线。线条和虚线是使用SVG的stroke属性和stroke-dasharray属性实现的&#xff0c;圆圈是使用SVG的circle元素实现的。动画效果是使用CSS的animation属性实现的&#xff0c;其中包含了一个名为Sn…

解决Gitee每次push都需要输入用户名和密码

其实很简单&#xff0c;只需要使用命令 git config --global credential.helper store 在你下次push时只需要再输入一次用户名和密码&#xff0c;电脑就会保存下来&#xff0c;之后就无需进行输入了。

【数据库】聊聊常见的索引优化-上

数据库对于现有互联网应用来说&#xff0c;其实是非常重要的后端存储组件&#xff0c;而大多数系统故障都是由于存储所导致的&#xff0c;而数据库是重中之重&#xff0c;所以为了比较好掌握SQL的基本优化手段&#xff0c;打算用两篇文章从基本的联合索引优化、group by/order …

ChatGPT大升级,文档图像识别领域迎来技术革新

​写在前面ChatGPT迎来重大升级冲击与机遇并存​大模型时代的思考与探索■ 像素级OCR统一模型- UPOCR■ OCR大一统模型- SPTS v3■ 文档识别分析LLM应用 写在最后问卷抽奖 ​写在前面 2023 年 12 月 31 日第十九届中国图象图形学学会青年科学家会议在广州召开&#xff0c;该会…

AE (5)_auto exposure的驱动控制

#灵感# 有个项目&#xff0c;一开始驱动没配好&#xff0c;自动曝光乱飞。所以记下配置 参考链接&#xff1a;关于 bringup sensor 时&#xff0c;曝光时间异常的问题排查-CSDN博客 目录 确认最大曝光行&#xff1a; 1、曝光行配置 2、增益配置 raw 图发紫&#xff1a; 确…

《MySQL系列-InnoDB引擎06》MySQL锁介绍

文章目录 第六章 锁1 什么是锁2 lock与latch3 InnoDB存储引擎中的锁3.1 锁的类型3.2 一致性非锁定读3.3 一致性锁定读3.4 自增长与锁3.5 外键和锁 4 锁的算法4.1 行锁的三种算法4.2 解决Phantom Problem 5 锁问题5.1 脏读5.2 不可重复读5.3 丢失更新 6 阻塞7 死锁 第六章 锁 开…

BMS电池管理系统带充放电控制过流过压保护

2.4G无线采集BMS开发板&#xff08;主从一体&#xff09; 全新升级 &#xff08;赠送上位机源码TTL 上位机&#xff0c;可以改成自己想要的界面&#xff09; 12串电池TTL上位机 CAN通信上位机源码有偿开源&#xff0c;供项目二次开发。 增加STM32平台 USB转TTL通信 CAN通信 增加…

软件测试|使用PyMySQL访问MySQL数据库的详细指南

简介 PyMySQL是Python中流行的MySQL数据库驱动程序&#xff0c;它提供了便捷的方法来连接、查询和更新MySQL数据库。本文将为您提供使用PyMySQL访问MySQL数据库的详细指南&#xff0c;包括安装PyMySQL、连接数据库、执行查询和更新操作等。 环境准备 在开始之前&#xff0c;…

死锁与读写锁

一、死锁 死锁&#xff08;Deadlock&#xff09;是在并发计算中的一种状态&#xff0c;其中两个或多个进程无法继续执行&#xff0c;因为每个进程都在等待另一个进程释放所占用的资源。这种情况通常发生在系统中的资源分配过程中&#xff0c;其中每个进程都占用一些资源&#…

揭秘大模型「幻觉」:数据偏差、泛化与上下文理解的挑战与解决之道

什么是大模型「幻觉」 所谓的「幻觉」指的是当大模型生成与现实不符或逻辑上不连贯的信息时。这通常发生在模型对某些数据理解不足或数据本身存在偏差的情况下。由于模型是基于概率统计和以往数据训练的,它们可能在面对未知或少见情况时产生不准确的推断。 大模型不具有本地知…

docker - 常用容器部署命令大全(MySQL、Redis、RabbitMQ、ES、Kibana、Nacos、Sentinel)

目录 一、常用容器运行指令 MySQL Redis RabbitMQ ElasticSearch & kibana Nacos Sentinel 一、常用容器运行指令 MySQL docker run -d --name mysql -p 3306:3306 -e TZAsia/Shanghai -e MYSQL_ROOT_PASSWORD1111 mysql:5.7 -e TZAsia/Shanghai&#xff1a;指定…