TuyaOS
|
这个项目将会介绍如何使用 tuyaos 3 network server
相关接口,创建一个服务端,等待客户端连接之后关闭服务器。
Socket 的其他相关知识在 network_client
的例程下已有介绍。
Socket
服务器特有函数接下来会介绍作为服务器特有的3个重要函数。
假设建立一个 TCP 连接,客户端和服务器的通信流程如下图所示:
相关函数目录: software/TuyaOS/include/components/tal_network/include/tal_network.h
这个项目将会介绍如何使用 tuyaos 3 network client
相关接口,创建客户端与服务器的 Socket
连接。
Socket
简介Socket
也叫套接字
是应用层与 TCP/IP
协议族通信的中间软件抽象层,更直白的话, Socket
就是一组接口。我们可以直接调用这些接口,实现设备之间的网络通信,无需关心数据的组织、如何发送接收等底层原理。
Socket
的文件描述符起初 Socket
在 Linux
上跑的时候, Socket
的文件描述符就是通讯双方各自建立的对象。因为 Linux
系统上一切皆文件, Socket
也不例外,它就是可读/可写/可控制/可关闭的文件描述符。现在 Socket
网络编程已经可以在 RTOS
下使用了,只要你有硬件支持,网络编程的大概用法也传承了下来。所以不管是 RTOS
还是 Linux
,Socket
的文件描述符的作用就是内核为了高效管理所创建的索引,即每创建一个 Socket
就对应一个文件描述符。文件描述符通常是一个大于0的整数。
客户端( Client
)是发送请求( request
),服务器端( Service
)是响应请求( response
)。例如有一款涂鸦的设备,要接入涂鸦 IOT
平台。那么涂鸦设备就是一个客户端,要发送接入 IOT
平台的请求;IOT
平台就是一个服务器,相响应涂鸦设备的接入请求。
TCP
和 UDP
TCP
和 UDP
两个协议都在运输层,它们都是用于数据传输的。但是两者有很大的区别。
IP
和整数 IP
我们一般情况下讲的 IP
地址是字符串的点分十进制形式
,例如“192.168.31.102”
。但是在 Socket
网络编程中的讲的地址通常都是整数形式的 IP
地址,所以需要进行地址转换,可以直接调用接口函数 tal_net_str2addr
进行转换。字符串 IP
地址 “192.168.31.102”
对应的整数地址为1713350848。
网络层为主机之间提供逻辑通讯,而 Socket
创建的 TCP/UDP
连接是运输层提供的端到端
的逻辑通讯。在一个系统中,会有很多进程,端口号的作用就是把接收到的网络数据转交给某个进程,每个进程都有自己的端口号。
如下图所示,假设我需要建立一个 TCP
连接,左边设备的某个进程要发送数据给右边设备的进程1,他的端口号是7777,所以我建立的 TCP
连接的时候,不仅需要右边设备的 IP
地址“192.168.56.3”
,还要建立连接进程的端口号7777。
相关函数目录: software/TuyaOS/include/components/tal_network/include/tal_network.h