一、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的使用相关推荐

  1. codeblock socket 编译错误_从Linux源码看Socket(TCP)Client端的Connect

    从Linux源码看Socket(TCP)Client端的Connect 前言 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情. 今天笔者就来从Linux源码的 ...

  2. nodejs TCP server和TCP client如何进行数据交互

    使用Jerry之前的文件成功建立服务器端和客户端的TCP连接后,客户端得到一个client实例: async function startClient(ip = configJson.TCP.clie ...

  3. nodejs TCP server和TCP client如何建立连接

    首先客户端和服务器端通信得需要一个消息结构,我用如下的构造函数创建一个消息结构,包含消息正文和消息类型(method): function message(_data,_method = '') {_ ...

  4. Modbus协议栈开发笔记之四:Modbus TCP Client开发

    这一次我们封装Modbus TCP Client应用.同样的我们也不是做具体的应用,而是实现TCP客户端的基本功能.我们将TCP客户端的功能封装为函数,以便在开发具体应用时调用. 对于TCP客户端我们 ...

  5. 网络通信之TCP Client通信(基于Arduino)

    网络通信之TCP Client通信(基于Arduino) 前期准备 实验要求 具体方法 程序流程 程序 实验现象 后续 前期准备 Arduino IDE ESPDuino Arduino ESP826 ...

  6. swoole深入学习 2. tcp Server和tcp Client

    swoole深入学习 2. tcp Server和tcp Client 标签(空格分隔): swoole 这节来学习Swoole最基础的Server和Client.会通过创建一个tcp Server来 ...

  7. STM32F1 W5500 TCP Client 回环测试

    刚刚接触W5500的时候,做TCP Client回环测试的时候,出现很奇怪的问题,查了好多遍代码,死活连接不上PC网络助手的TCPServer.其实代码本身没什么大问题,PC机的防火墙忘记关闭了.总结 ...

  8. 关于HML要玩物联网这件事 之 CC3200 TCP Client

    假装是个引言 去年TI难得发了次大福利,圣诞节派送CC3200开发板.本辣鸡博主抢得早,加上没落C9.edu.cn 邮箱加持,抽奖居然抽中了.TI不论是赞助竞赛还是送板子,目的都很明确,就是想推广自己 ...

  9. ESP8266开发之旅 网络篇⑦ TCP Server TCP Client

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... 共同学习成长QQ群 622368884,不喜勿 ...

最新文章

  1. 人工智能写手,好用吗?
  2. IBM首席执行官提出人工智能部署三大基本原则
  3. 和lock一起学beego 博客系统开发为例(五)
  4. python面试常见问题-Python面试中常见的40个问题
  5. Design Pattern Quick Overview
  6. ITK:过滤图像FilterImage
  7. mysql索引 聚集索引_Mysql 索引实现原理. 聚集索引, 非聚集索引
  8. 在基于Jetty Fast CGI Proxy和php-fpm下配置Discuz
  9. 追了多年的开发框架,你还认识指针吗?
  10. 将编号为0和1的两个栈存放于一个数组空间V[m]中。
  11. Oracle 游标使用大全
  12. 解决VMware Workstation下面Windows Server 2012R2无法安装Hyper-V
  13. Django admin美化插件suit
  14. 使用 HMAC-SHA1 算法
  15. 广数25i系统倒刀回刀m代码_广数系统编程实例精选
  16. OneNote无法同时设置中英文字体设置解决办法
  17. python复制网页文字_我用Python在网上复制文字的几种实用方法
  18. 卖计算机英语对话,买电脑英语情景对话
  19. 2022-2027年中国婴幼儿床上用品市场竞争态势及行业投资前景预测报告
  20. 10 种 Python 聚类算法完整操作示例(附代码说明)

热门文章

  1. 乔布斯:去你妹的iTV 老子要iCar!
  2. 推荐用于学习RN原生模块开发的开源库—react-native-ble-manager
  3. 万字长文|“重新定义公司:谷歌是如何运营的”——某出行产品技术VP带你解读管理和商业逻辑
  4. 三星冰箱再发力 带领行业走出严冬
  5. mysql latin1默认,为什么MySQL使用latin1_swedish_ci作为默认值?
  6. 关于外贸的相关知识和经验(上)
  7. linux网页进入jupyter,在linux下配置jupyter notebook,本地浏览器访问
  8. 移动开发作业4 LBS定位
  9. abort linux,ARM Linux异常处理之data abort
  10. CreateFile | ReadFile | WriteFile - WINDOWS API 第五弹 C++创建任意格式的文件用于读取和写入。