基于TCP/UDP的WIFI通信项目
2016-04-06 15:10
309 查看
最近一个月做了一个有关PM2.5室内空气净化的一个项目,控制器采用的是STM32,其中一部分就是实现PC-----控制器------风机之前的通信,采用的技术是WIFI技术,核心部分就是UDP之间的通信。下面总结一下。。。
机制:PC采用UDP广播模式,即控制器需要提供一个指定的端口,比如10100,PC通过配置对端IP 255.255.255.255 PORT 10100即可向对端(控制器)发送指定的协议,我的控制器采用的是ESP8266WIFI模块,该模块是与串口进行直连,支持透传和AT指令,我采用的是AT指令模式,此模块最多支持4路连接,我采用配置其中的两路完成我的整个功能,一个是与PC通信的UDP连接,另一个是与风机通信的UDP广播。
与PC通信的UDP连接处理机制:系统启动过程中有一个默认的对端IP和对端端口以及一个确定的本地端口,由于PC用的是广播模式,所以只要保证向我确定的本地端口发送广播数据,我就可以接收到,但是我想要向PC返回数据时,我就需要知道PC端的IP和端口,因此在广播数据中,按照指定的协议,需要包含PC端的IP地址和PC端的端口号,当我接收到的IP和端口与我默认的IP和端口不一致时,我程序需要自动再次完成socket连接(AT指令连接),连接完成后即可点对点UDP数据收发。
与风机通信的UDP广播机制:通过AT指令配置第二个UDP广播模式连接,说来也奇葩,配了好长时间就是配不成功,原因是需要将对端IP配置成192.168.1.255,而不是通常的255.255.255.255,这块部分应该是因模块厂家不同而不同,配置成广播模式之后,即可通过AT指令向相应的连接发送数据。
此部分是后来补充:上网查了下,原来192.168.1.255是局域网中进行广播,不可以跨路由;而255.255.255.255是全网进行广播,可以跨路由进行广播!
我用的WIFI模块工作模式是AP+STA工作模式,作为AP目的:PC和我控制器直连,配置我要连接的热点的ssid和密码;作为STA,通过连接到局域路由,完成PC---控制器----风机的通信,这三大部分都是连接的同一个路由!
关于TCP/UDP:
仅个人理解:
TCP协议:分为TCP sever和TCP client ,TCP client与TCP sever 三次握手之后建立连接完成两者之间的通信
UDP协议:部分服务器端和客户端(仅个人理解),实际就是点对点通信,我只要知道对端的IP和对端的端口,我就可以向对端发送数据,前提是对端和自己在同一个路由上连接,如果对端IP改成255.255.255.255,PORT为某一个端口,比如:10100,则在该局域网中不论IP为多少,只要是端口设置成10100的,都能接收到广播端数据,通过TCP/UDP调试软件可进行局域内部测试
LINUX 下的TCP/UDP socktet工作原理
点击打开链接
机制:PC采用UDP广播模式,即控制器需要提供一个指定的端口,比如10100,PC通过配置对端IP 255.255.255.255 PORT 10100即可向对端(控制器)发送指定的协议,我的控制器采用的是ESP8266WIFI模块,该模块是与串口进行直连,支持透传和AT指令,我采用的是AT指令模式,此模块最多支持4路连接,我采用配置其中的两路完成我的整个功能,一个是与PC通信的UDP连接,另一个是与风机通信的UDP广播。
与PC通信的UDP连接处理机制:系统启动过程中有一个默认的对端IP和对端端口以及一个确定的本地端口,由于PC用的是广播模式,所以只要保证向我确定的本地端口发送广播数据,我就可以接收到,但是我想要向PC返回数据时,我就需要知道PC端的IP和端口,因此在广播数据中,按照指定的协议,需要包含PC端的IP地址和PC端的端口号,当我接收到的IP和端口与我默认的IP和端口不一致时,我程序需要自动再次完成socket连接(AT指令连接),连接完成后即可点对点UDP数据收发。
与风机通信的UDP广播机制:通过AT指令配置第二个UDP广播模式连接,说来也奇葩,配了好长时间就是配不成功,原因是需要将对端IP配置成192.168.1.255,而不是通常的255.255.255.255,这块部分应该是因模块厂家不同而不同,配置成广播模式之后,即可通过AT指令向相应的连接发送数据。
此部分是后来补充:上网查了下,原来192.168.1.255是局域网中进行广播,不可以跨路由;而255.255.255.255是全网进行广播,可以跨路由进行广播!
我用的WIFI模块工作模式是AP+STA工作模式,作为AP目的:PC和我控制器直连,配置我要连接的热点的ssid和密码;作为STA,通过连接到局域路由,完成PC---控制器----风机的通信,这三大部分都是连接的同一个路由!
关于TCP/UDP:
仅个人理解:
TCP协议:分为TCP sever和TCP client ,TCP client与TCP sever 三次握手之后建立连接完成两者之间的通信
UDP协议:部分服务器端和客户端(仅个人理解),实际就是点对点通信,我只要知道对端的IP和对端的端口,我就可以向对端发送数据,前提是对端和自己在同一个路由上连接,如果对端IP改成255.255.255.255,PORT为某一个端口,比如:10100,则在该局域网中不论IP为多少,只要是端口设置成10100的,都能接收到广播端数据,通过TCP/UDP调试软件可进行局域内部测试
LINUX 下的TCP/UDP socktet工作原理
点击打开链接
相关文章推荐
- http 请求安全
- onethink uploadify HTTP302错误
- Android网络通信框架
- delphi异步选择模型编程TCP
- HTTP响应头和请求头信息对照表
- IP地址、子网掩码、网络号、主机号、网络地址、主机地址
- C#中检查网络是否连通的二种方法
- C# WebClient 使用http免费代理。
- (待续)IP, DNS, HTTP
- HTTP 缓存
- 详解HTTPS
- 基于Twisted的通过HTTP协议下载文件
- TCP/IP,Http,Socket,XMPP的区别
- 后端程序员也需要理解的HTTP缓存
- HTTP 304
- GPG error: http://cn.archive.ubuntu.com trusty InRelease: Clearsigned file isn't valid, got 'NODATA'
- 网络爬虫开发技术——快速线程池爬虫
- 网络爬虫开发技术——数据存储以及多线程
- Android客户端采用Http 协议Post方式请求与服务端进行数据交互(转)
- 网络爬虫开发技术——整站爬虫与Web挖掘