LWIP Socket UDP接收数据无法获取IP地址信息

项目场景:

STM32H743平台FreeRTOS下使用LWIP,在使用socket接口操作udp;


问题描述

接收UDP数据时不能获取远端IP和端口号

	struct sockaddr_in seraddr;
	socklen_t addrlen ;
	recv_data_len=recvfrom(dev_handle->sock,
							recv_data,
							MAX_PCAK_SIZE,
							0,
							(struct sockaddr*)&seraddr,
							&addrlen);

解决方案:

	//初始化时必须给值,否则会导致不能收到远端信息
	socklen_t addrlen  = sizeof(seraddr);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于使用lwIP库进行socket通信并接收数据的问题,可以按照以下步骤进行操作: 1. 创建一个socket连接: 使用`socket()`函数创建一个socket连接,并指定协议(例如TCPUDP)和传输层协议(IPv4或IPv6)。 2. 绑定socket到本地地址和端口: 使用`bind()`函数将socket绑定到本地的IP地址和端口号。 3. 监听连接请求(仅适用于TCP): 如果使用TCP协议,可以使用`listen()`函数开始监听连接请求。 4. 接受连接(仅适用于TCP): 使用`accept()`函数接受客户端的连接请求,并返回一个新的socket用于与客户端进行通信。 5. 接收数据: 使用`recv()`函数从已连接的socket接收数据。该函数将返回接收到的字节数和数据内容。 下面是一个使用lwIP库进行socket接收数据的示例代码片段: ```c #include "lwip/sockets.h" int main() { int sockfd, newsockfd; struct sockaddr_in serv_addr, cli_addr; char buffer[1024]; // 创建socket sockfd = socket(AF_INET, SOCK_STREAM, 0); // 设置服务器地址和端口 serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(1234); serv_addr.sin_addr.s_addr = INADDR_ANY; // 绑定socket bind(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); // 监听连接请求 listen(sockfd, 5); // 接受连接 int clilen = sizeof(cli_addr); newsockfd = accept(sockfd, (struct sockaddr*)&cli_addr, &clilen); // 接收数据 int n = recv(newsockfd, buffer, sizeof(buffer), 0); // 打印接收到的数据 printf("Received: %s\n", buffer); // 关闭socket close(newsockfd); close(sockfd); return 0; } ``` 请注意,此示例代码假设您已经正确配置了lwIP库,并且在编写和构建代码时已包含了必要的头文件和库文件。另外,您需要根据您的实际需求进行适当的错误处理和其他必要的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值