esp32 tcp client的使用
一、esp32 tcp 客户端使用步骤
1、创建一个套接字描述符 使用socket(AF_INET, SOCK_STREAM ,0)函数
2、设置本地端口等 使用bind(tcpsock,(struct sockaddr *)&Loacl_addr,sizeof(Loacl_addr));
3、连接server 使用connect(tcpsock, (struct sockaddr *)&dest_addr, sizeof(dest_addr));
4、发送数据 使用send(tcpsock, "tcp test", strlen("tcp test"), 0);
5、接收服务器的数据 使用recv(tcpsock, rx_buffer, sizeof(rx_buffer) - 1, 0);
二、详细代码
#include <string.h>
#include <sys/param.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"
#include "esp_system.h"
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_log.h"
#include "nvs_flash.h"
#include "tcpip_adapter.h"#include "lwip/err.h"
#include "lwip/sockets.h"
#include "lwip/sys.h"
#include <lwip/netdb.h>#define HOST_IP_ADDR "192.168.43.95"
#define PORT 12345
int tcpsock = 0;
struct sockaddr_in dest_addr;TaskHandle_t xtcpRecvTask = NULL;void tcp_recv_data(void *pvParameters){uint8_t rx_buffer[1024] = {0};printf("create tcp recv\n");int err = send(tcpsock, "tcp test", strlen("tcp test"), 0);if (err < 0) {printf( "Error occurred during sending: errno %d", errno);return;}printf("Message sent");while (1){int len = recv(tcpsock, rx_buffer, sizeof(rx_buffer) - 1, 0);if(len > 0){rx_buffer[len] = 0; // Null-terminate whatever we received and treat like a stringprintf("Received %d bytes from %s:\n", len, rx_buffer);int err = send(tcpsock, rx_buffer, len, 0);if (err < 0) {printf( "Error occurred during sending: errno %d", errno);return;}printf("Message sent");}}}void tcp_ini_client(void){tcpsock = socket(AF_INET, SOCK_STREAM ,0);printf("sock:%d\n",tcpsock);if(tcpsock < 0){printf( "Unable to create socket: errno %d", errno);return;}printf("Socket created, sending to %s:%d", HOST_IP_ADDR, PORT);dest_addr.sin_addr.s_addr = inet_addr(HOST_IP_ADDR);dest_addr.sin_family = AF_INET;dest_addr.sin_port = htons(PORT);struct sockaddr_in Loacl_addr; //设置本地端口Loacl_addr.sin_addr.s_addr = htonl(INADDR_ANY);Loacl_addr.sin_family = AF_INET;Loacl_addr.sin_port = htons(54321);uint8_t res = 0;res = bind(tcpsock,(struct sockaddr *)&Loacl_addr,sizeof(Loacl_addr));if(res != 0){printf("bind error\n");}int err = connect(tcpsock, (struct sockaddr *)&dest_addr, sizeof(dest_addr));if (err != 0) {printf( "Socket unable to connect: errno %d", errno);return;}printf( "Successfully connected\n");xTaskCreate(&tcp_recv_data,"tcp_recv_data",2048*2,NULL,10,&xtcpRecvTask);}
三、测试结果
流程和UDP 的是一样的 开始client发送一个字符串 然后等待接收服务器的数据并且把接收到的数据原路返回
esp32 tcp client的使用相关推荐
- codeblock socket 编译错误_从Linux源码看Socket(TCP)Client端的Connect
从Linux源码看Socket(TCP)Client端的Connect 前言 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情. 今天笔者就来从Linux源码的 ...
- nodejs TCP server和TCP client如何进行数据交互
使用Jerry之前的文件成功建立服务器端和客户端的TCP连接后,客户端得到一个client实例: async function startClient(ip = configJson.TCP.clie ...
- nodejs TCP server和TCP client如何建立连接
首先客户端和服务器端通信得需要一个消息结构,我用如下的构造函数创建一个消息结构,包含消息正文和消息类型(method): function message(_data,_method = '') {_ ...
- Modbus协议栈开发笔记之四:Modbus TCP Client开发
这一次我们封装Modbus TCP Client应用.同样的我们也不是做具体的应用,而是实现TCP客户端的基本功能.我们将TCP客户端的功能封装为函数,以便在开发具体应用时调用. 对于TCP客户端我们 ...
- 网络通信之TCP Client通信(基于Arduino)
网络通信之TCP Client通信(基于Arduino) 前期准备 实验要求 具体方法 程序流程 程序 实验现象 后续 前期准备 Arduino IDE ESPDuino Arduino ESP826 ...
- swoole深入学习 2. tcp Server和tcp Client
swoole深入学习 2. tcp Server和tcp Client 标签(空格分隔): swoole 这节来学习Swoole最基础的Server和Client.会通过创建一个tcp Server来 ...
- STM32F1 W5500 TCP Client 回环测试
刚刚接触W5500的时候,做TCP Client回环测试的时候,出现很奇怪的问题,查了好多遍代码,死活连接不上PC网络助手的TCPServer.其实代码本身没什么大问题,PC机的防火墙忘记关闭了.总结 ...
- 关于HML要玩物联网这件事 之 CC3200 TCP Client
假装是个引言 去年TI难得发了次大福利,圣诞节派送CC3200开发板.本辣鸡博主抢得早,加上没落C9.edu.cn 邮箱加持,抽奖居然抽中了.TI不论是赞助竞赛还是送板子,目的都很明确,就是想推广自己 ...
- ESP8266开发之旅 网络篇⑦ TCP Server TCP Client
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... 共同学习成长QQ群 622368884,不喜勿 ...
最新文章
- 人工智能写手,好用吗?
- IBM首席执行官提出人工智能部署三大基本原则
- 和lock一起学beego 博客系统开发为例(五)
- python面试常见问题-Python面试中常见的40个问题
- Design Pattern Quick Overview
- ITK:过滤图像FilterImage
- mysql索引 聚集索引_Mysql 索引实现原理. 聚集索引, 非聚集索引
- 在基于Jetty Fast CGI Proxy和php-fpm下配置Discuz
- 追了多年的开发框架,你还认识指针吗?
- 将编号为0和1的两个栈存放于一个数组空间V[m]中。
- Oracle 游标使用大全
- 解决VMware Workstation下面Windows Server 2012R2无法安装Hyper-V
- Django admin美化插件suit
- 使用 HMAC-SHA1 算法
- 广数25i系统倒刀回刀m代码_广数系统编程实例精选
- OneNote无法同时设置中英文字体设置解决办法
- python复制网页文字_我用Python在网上复制文字的几种实用方法
- 卖计算机英语对话,买电脑英语情景对话
- 2022-2027年中国婴幼儿床上用品市场竞争态势及行业投资前景预测报告
- 10 种 Python 聚类算法完整操作示例(附代码说明)
热门文章
- 乔布斯:去你妹的iTV 老子要iCar!
- 推荐用于学习RN原生模块开发的开源库—react-native-ble-manager
- 万字长文|“重新定义公司:谷歌是如何运营的”——某出行产品技术VP带你解读管理和商业逻辑
- 三星冰箱再发力 带领行业走出严冬
- mysql latin1默认,为什么MySQL使用latin1_swedish_ci作为默认值?
- 关于外贸的相关知识和经验(上)
- linux网页进入jupyter,在linux下配置jupyter notebook,本地浏览器访问
- 移动开发作业4 LBS定位
- abort linux,ARM Linux异常处理之data abort
- CreateFile | ReadFile | WriteFile - WINDOWS API 第五弹 C++创建任意格式的文件用于读取和写入。