TuyaOS
网络

NETWORK SERVER

这个项目将会介绍如何使用 tuyaos 3 network server 相关接口,创建一个服务端,等待客户端连接之后关闭服务器。

Socket 的其他相关知识在 network_client 的例程下已有介绍。

  • Socket 服务器特有函数

接下来会介绍作为服务器特有的3个重要函数。

server bind listen accept 12138 .png

  • socket 通信流程

假设建立一个 TCP 连接,客户端和服务器的通信流程如下图所示:

service and cilent process .png

流程介绍

相关函数目录: software/TuyaOS/include/components/tal_network/include/tal_network.h

server process .png

NETWORK CLIENT

这个项目将会介绍如何使用 tuyaos 3 network client 相关接口,创建客户端与服务器的 Socket 连接。

  • Socket 简介

Socket 也叫套接字是应用层与 TCP/IP 协议族通信的中间软件抽象层,更直白的话, Socket 就是一组接口。我们可以直接调用这些接口,实现设备之间的网络通信,无需关心数据的组织、如何发送接收等底层原理。

tcpip socket.png

  • Socket 的文件描述符

起初 SocketLinux 上跑的时候, Socket 的文件描述符就是通讯双方各自建立的对象。因为 Linux 系统上一切皆文件, Socket 也不例外,它就是可读/可写/可控制/可关闭的文件描述符。现在 Socket 网络编程已经可以在 RTOS 下使用了,只要你有硬件支持,网络编程的大概用法也传承了下来。所以不管是 RTOS 还是 Linux ,Socket 的文件描述符的作用就是内核为了高效管理所创建的索引,即每创建一个 Socket 就对应一个文件描述符。文件描述符通常是一个大于0的整数。

  • 客户端和服务器

客户端( Client )是发送请求( request ),服务器端( Service )是响应请求( response )。例如有一款涂鸦的设备,要接入涂鸦 IOT 平台。那么涂鸦设备就是一个客户端,要发送接入 IOT 平台的请求;IOT 平台就是一个服务器,相响应涂鸦设备的接入请求。

  • TCPUDP

TCPUDP 两个协议都在运输层,它们都是用于数据传输的。但是两者有很大的区别。

tcp and udp 12138.png

  • 字符串 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。

PORttttt  12138.png

流程介绍

相关函数目录: software/TuyaOS/include/components/tal_network/include/tal_network.h

cilent process 12138.png