纳尼?昨天刚刚打印了个“Hello World!”,今天你就让我学习TCP通信?有没有搞错~哈哈,相信很多读者会很迷,其实学习这东西嘛,单单学一些比较简单的,相信没两天就没人看了,所以咱就在基础篇和网络篇穿插着去学习一下ESP8266,毕竟兴趣才是最好的老师嘛!大家以后遇到问题了,来翻文章建议大家根据[XX篇]去快速定位该去哪一篇文章中去查找问题,当然具体会在哪一篇文章中有讲,也不一定了,后面也会穿插着写一点[项目篇][进阶篇][闲扯篇],总的来说就是,本系列文章并没有固定的路线,大家不如忍忍?当然这里写的文章也不一定是对的,大家在实际测试中如果遇到了问题,还请私信我,或者在Github上提交issue!

闲话少说,既然要学习TCP通信的知识,那么我们得先要了解一下TCP到底是个什么东西(玩意),正所谓孙子曾经曰过“知彼知己,百战不殆”,那我们先补一些关于TCP的知识吧!

TCP基础知识:

  • 是什么?

TCP(Transmission Control Protocol传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。(百度词条搜到的~)

说白了就是一种传输协议,就像我们串口、232、485等一样的通讯协议,只不过TCP多用于网络间的通讯,不过TCP是在IP层之上的,相信你肯定见过或者听说过TCP/IP协议,没错,这哥俩是绑在一块的,TCP是依赖IP协议的。

  • 通讯机制

TCP与我们常使用的串口等通讯协议有什么不同呢?首先是两台主机建立TCP连接机制是比较麻烦的,要经过三次握手协议,才能建立连接,过程用汉字描述如下:

  • 客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
  • 服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。
  • 客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。

看字比较麻烦,我们还是看图吧!

既然有建立连接,那么肯定也有断开连接,但是没想到断开连接比建立连接还要麻烦,还有四次挥手协议,纳尼?是的,断开连接需要经过四次挥手协议,直接看图吧:

  • 可靠性

上面说的通讯机制之所以这么麻烦,主要还是为了传输的可靠性,因为TCP是在整个网络中去传输,只要你有IP地址,并且在广域网中访问,那我们就可以建立TCP连接,说会悄悄话~所以,两者之间的可靠性就显得很重要了,客户端与服务端之间的连接可靠性靠很多策略去实现的比如心跳包机制,这里就不再详细叙述了,有点跑题了,这是ESP8266学习笔记~

  • 数据包格式

TCP的数据包相对来说是比较麻烦的,确认信息占据了整个数据包的很大一部分,设计的这么复杂主要原因还是保证在整个网络当中每包数据传输的正确性,这里我们就看一下数据包到底有多么复杂:

可以看到在整个数据包中,数据只占了很小一部分,更多的是各种确认信息,感兴趣的可以去再了解一下,好好学习一下网络传输协议对学习物联网也是很有帮助的,只可惜作者这里也还是菜鸟一个~

  • ESP8266作为TCP Client跟Server(PC)通信

了解了一点点基础知识后,我们还是要落实到实践上,下面我们正式开始,首先我们需要先看一下官方SDK编程指导手册,还没有?不知道去哪里下?好嘞,直接戳下面卡片下载好了~

https://www.espressif.com/sites/default/files/documentation/2c-esp8266_non_os_sdk_api_reference_cn.pdf​www.espressif.com

英文版戳这里,如果你英语跟小编一样好的话,建议看英文版,要不断提升自己的英语~

https://www.espressif.com/sites/default/files/documentation/2c-esp8266_non_os_sdk_api_reference_en.pdf​www.espressif.com

咳咳咳,那我们先打开这个英文文档,找到97页的TCP/UDP接口,我们先看一下接口分了几类:

咳咳咳,不要怀疑,使用的PDF查看软件有自动翻译动能,手动滑稽.jpg,可以看到一共分了4类,本篇文章我们先研究下通用 API和TCP API,关于UDP和mDNS的我们再后面的文章中再继续学习,你可以先大体看一下,每个API的注释都讲的很明白,我们不妨直接copy点代码直接跑一下?

#如果之前有clong过,可以直接 git pull,不会用?那肯定是没好好看廖雪峰的git教程

下载完成后,打开ESP_IDE导入在makingfunxyz-esp8266-NONOS文件中的6.TCP_UDP_Server_Client这个工程,然后先修改一点东西,这一步很重要,请不要忽略:

Wi-Fi名称跟密码相信你肯定知道,TCP_SERVER_IP应该要修改成什么呢?就是你电脑的IP地址,这里每个人的都不一样,建议你先去查看一下,方法看视频~

PC查看本机IPhttps://www.zhihu.com/video/1053785725551677440

可以看到我这里是192.168.0.109,那我就将它修改成192.168.0.109,这三个地方都修改好了后,我们直接先编译代码,先跑一下看看!编译好代码后,下载到ESP8266,这里跟上篇文章中是一样的,就不再详述,下载地址参考:

  • eagle.flash.bin-------->0x00000
  • eagle.irom0text.bin---->0x10000
  • esp_init_data_default_v08.bin --> 0x3FC000
  • blank.bin --> 0x3FE000

下载完成后,我们先不要急着去看结果,因为我们还没有开启TCP Server,那我们该怎么开启TCP Server呢?我这里用Python写了一个很简单的Server端程序,大家可以使用我这个,要是使用别的TCP调试助手,注意TCP_SERVER_PORT也要修改一下,运行我们的Server很简单,但是你需要安装一下Python,我这里没有打包成可执行文件,先去安装一下Python吧,我用的是Python3,建议大家也安装Python3,因为Python2跟Python3有些语法不一样,戳卡片下载:

Download Python​www.python.org

下载安装完成后,开始搞起来,我们需要在6.TCP_UDP_Server_Client这个文件夹下找到TCP_Server.py这个文件夹,然后打开修改一下IP地址,将IP地址修改成上面我们查看的本机地址,看图:

最后我们还需要设置一下开放端口,这里步骤有点多,就不再细述了,大家可以直接看这个百度知道,写的很详细:

https://jingyan.baidu.com/article/09ea3ede7311dec0afde3977.html​jingyan.baidu.com

然后打开命令窗口,具体操作办法,在此文件下按住shift键,然后右键选择打开powershell窗口(WIN7 应该是cmd窗口),然后:

#可以直接在powershell里面执行,但是我还是比较喜欢cmd窗口,所以就~win7不用,因为打开的就是cmd窗口

ESP8266 TCP Clienthttps://www.zhihu.com/video/1053785893437112320

  • ESP8266作为TCP Server跟Client(PC)通信

上面是ESP8266作为Client去跟Server通信,但是ESP8266不仅可以作为Client还可以作为Server等待Client去建立连接去通信,这里我们修改几个地方,就可以将ESP8266作为Server去跟Client通信了,我在源码中已经都写好了,这里我们将同样将ESP8266的6666作为PC去连接的端口号:

其中TCP_Client.py文件中的IP地址需要在ESP8266上电打印后修改一下,我们将上面小节中的tcp_client_init()注释掉,tcp_server_init()取消注释,然后重新编译代码下载就好了,PC上的Client程序跟Server程序运行一样,这里我们直接看一下视频吧!

ESP8266 TCP Serverhttps://www.zhihu.com/video/1053786028644626432

这里代码就不再解释了,我写的注释还算全,大家一看就懂,主要代码:

/****************************

user_main.c中的主要代码:

struct 

最后欢迎大家去我的仓库点个Star,您的鼓励是我最大的动力~有问题可以私信我,或者提交issues。

imliubo/makingfunxyz-esp8266​github.com

物联网开发交流群​jq.qq.com

esp8266等待上电同步_[网络篇]ESP8266-NonOS学习笔记(三)之TCP通信Serverlt;-gt;Client相关推荐

  1. Linux 网络编程学习笔记——三、TCP 协议详解

    目录 一.TCP 服务的特点 传输层协议主要有 TCP 协议和 UDP 协议,前者相对于后者的特点是:面向连接.字节流和可靠传输. 使用 TCP 协议通信的双方必须先建立连接,然后才能开始数据的读写. ...

  2. 【应用篇】WCF学习笔记(一):Host、Client、MetadataExchage

    虽然已经在多个项目中成功应用过WCF,但是感觉自己对WCF的知识只知道一些皮毛而已.上次学习WCF也是为了项目需要,囫囵吞枣.这不是我学习方法的态度.所以时至今日,又重新拾卷,再仔细的将WCF一些细节 ...

  3. 【Linux】网络编程三:TCP通信和UDP通信介绍及代码编写

    参考连接:https://www.nowcoder.com/study/live/504/2/16. [Linux]网络编程一:网络结构模式.MAC/IP/端口.网络模型.协议及网络通信过程简单介绍 ...

  4. Swift网络开发之NSURLSession学习笔记

    为什么80%的码农都做不了架构师?>>>    Swift网络开发之NSURLSession学习笔记 先上效果图:        功能: -单个任务下载 -暂停下载任务 -取消下载任 ...

  5. 这是一篇Markdown的学习笔记整理

    这是一篇Markdown的学习笔记整理 参考博客: https://blog.csdn.net/u014061630/article/details/81359144 写得比我详细好多_(:з」∠)_ ...

  6. [网络篇]ESP8266-SDK教程(三)之TCP通信Server-Client

    纳尼?昨天刚刚打印了个"Hello World!",今天你就让我学习TCP通信?有没有搞错~哈哈,相信很多读者会很迷,其实学习这东西嘛,单单学一些比较简单的,相信没两天就没人看了, ...

  7. python socket服务器_python网络编程学习笔记(三):socket网络服务器

    1.TCP连接的建立方法 客户端在建立一个TCP连接时一般需要两步,而服务器的这个过程需要四步,具体见下面的比较.步骤 TCP客户端 TCP服务器 第一步 建立socket对象 建立socket对象 ...

  8. java线程集合点_Java多线程学习笔记(三) 甚欢篇

    使人有乍交之欢,不若使其无久处之厌 <小窗幽记>很多时候,我们需要的都不是再多一个线程,我们需要的线程是许多个,我们需要让他们配合.同时我们还有一个愿望就是复用线程,就是将线程当做一个工人 ...

  9. wringPi 初始化GPIO 为上拉_敏矽微电子Cortex-M0学习笔记04-GPIO详解及应用实例

    前面我们已经对敏矽微电子的基于cortex m0内核的ME32F030R8T6的基本功能做了介绍,然后详细讲解了开发环境MDK的安装,pack包的安装,工程的建立及程序的仿真,紧接着讲解了ME32F0 ...

  10. Top-k高效用项集挖掘_学习笔记(三) TKO

    前言 本篇博客出于学习交流目的,主要是用来记录自己学习后的理解,过程中遇到的问题和心路历程,方便之后回顾.过程中可能引用其他大牛的博客,文末会给出相应链接,侵删! REMARK:本人菜鸟一枚,如有理解 ...

最新文章

  1. Redis缓存穿透问题及解决方案
  2. ELK 构建 MySQL 慢日志收集平台详解
  3. qtextedit 默认文案_QT-纯代码控件-QSplitter(分裂器)
  4. 企业域名更换操作系列4:下载旧域域信息配置
  5. Jquery取form表单中的所有参数
  6. python实现webrtc接入ipc_WebRTC音视频会议的优势
  7. Ros简单程序编写及使用类Hello World
  8. HTML5与HTML4区别
  9. 30 张快速学习 Java 的思维导图
  10. 64位计算机可以安装xp,64位xp系统如何安装【图解】
  11. NDK学习笔记:线程JNIEnv,JavaVM,JNI_OnLoad(GetEnv返回NULL?FindClass返回NULL?)
  12. win10运行安装软件程序提示“为了对电脑进行保护,已经阻止此应用” 有效解决方法记录
  13. RSE2021/云检测:基于小波变换和连续多尺度空间注意的上下块深度网络云检测
  14. 爬虫工具在就业市场的受欢迎程度
  15. 双臂路由实现vlan间通信
  16. 使用Python爬出王者荣耀高清皮肤图片
  17. matlab中求矩阵A的特征向量,matlab层次分析法求特征值及特征向量.doc
  18. 流场可视化工程dlb-dynamicdr部署日志:阶段二:工程本地编译
  19. python怎么画地球_第12天|16天搞定Python数据分析,在地球上画个圈
  20. Java练习题第十九期:另类加法

热门文章

  1. Eclipse 汉化方法
  2. 配置Qt开发环境下的OpenCV开发
  3. 【GDB调试学习笔记】GDB查看运行时数据
  4. 基于LDA的文本主题聚类Python实现
  5. 《剑指offer》面试题20——顺时针打印矩阵(C++)
  6. USGS批量下载SRTM1数据
  7. 阿里云服务器部署GeoServer以及跨域处理
  8. FVC与地表温度的相关性分析研究
  9. 使用讯飞实现语音听写与语音合成功能
  10. SSM使用拦截器功能