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

news/2024/5/18 12:36:01 标签: udp, 单片机, 网络协议

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.niftyadmin.cn/n/5308329.html

相关文章

Linux 上 Nginx 配置访问 web 服务器及配置 https 访问配置过程记录

目录 一、前言说明二、配置思路三、开始修改配置四、结尾 一、前言说明 最近自己搭建了个 Blog 网站,想把网站部署到服务器上面,本文记录一下搭建过程中 Nginx 配置请求转发的过程。 二、配置思路 web项目已经在服务器上面运行起来了,运行的端…

uniapp 创建组件组件

组件:用于将某个功能的 HTML、CSS、JS 封装到一个文件中,提高代码的复用性和可维护性。 创建组件 一、在根目录中创建 components 文件夹,右键点击新建组件。 二、输入组件名称、选择默认模板、点击创建组件。 三、在组件中正常编写内容即可…

Linux系统性能优化:七个实战经验

Linux系统的性能是指操作系统完成任务的有效性、稳定性和响应速度。Linux系统管理员可能经常会遇到系统不稳定、响应速度慢等问题,例如在Linux上搭建了一个web服务,经常出现网页无法打开、打开速度慢等现象,而遇到这些问题,就有人…

从零开始构建一个属于您的 Web3 项目(Web3项目三实战之一)

午后,沏上一壶茶,走到那冬日暖阳照耀到的阳台,落座于桌旁,很是舒心地敲打键盘上的每个按键,这样的午后,或许才是我们所向往的吧! 它舍弃了城市中的喧嚣;也没有大都市的那种快节奏;更加没有了“尔虞我诈、精于算计”的职场“战火硝烟”。 它有的只是寂静、随心所欲、闲…

一起学docker(六)| docker网络

Docker网络 不启动docker,网络情况: 启动docker,网络情况: 作用 容器间的互联和通信以及端口映射容器IP变动时候可以通过服务名直接网络通信而不受影响 常用命令 docker network --help 查看docker网络相关命令docker network…

华为HCIE课堂笔记第十一章 IPv6概述

第十一章 IPv6概述 11.1 背景 根本原因是:IPv4地址枯竭,IPv6是IPV4的升级版本 11.1.1 IPv6地址的优势: 地址空间足够大 128bit支持即插即用底层化地址结构:地址分配有一定的标准相比于IPv4简化了报文的头部,提高了…

基于springboot的sql防注入过滤器

目录 何为SQL注入基于springboot的sql防注入过滤器 回到顶部 何为SQL注入 SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现…

63.接口安全设计(活动管理系统:三)

文章目录 一、参数校验二、统一封装返回值三、做权限控制四、加验证码五、 限流六、加ip白名单七、校验敏感词八、使用https协议九、数据加密十、做风险控制 在日常工作中,开发接口是必不可少的事情,无论是RPC接口还是HTTP接口,我们都应该考虑…