ESP8266开发之旅 网络篇⑦ TCP Server TCP Client (2)

函数说明:

/** * 获取tcp连接状态 * @return result of tcp connect * CLOSED = 0, * LISTEN = 1, * SYN_SENT = 2, * SYN_RCVD = 3, * ESTABLISHED = 4, * FIN_WAIT_1 = 5, * FIN_WAIT_2 = 6, * CLOSE_WAIT = 7, * CLOSING = 8, * LAST_ACK = 9, * TIME_WAIT = 10 */ uint8_t status(); 3.2 发送数据操作

发送操作的源码可以查阅 Print.cpp

3.2.1 write - 发送数据到client连接的server

函数说明:

/** * 发送数据 * @param str 需要单个字节 * @return size_t 成功写入发送缓冲区的字节数 */ size_t write(uint8_t); /** * 发送数据 * @param str 需要发送字符串或者字符数组 * @return size_t 成功写入发送缓冲区的字节数 */ size_t write(const char *str); /** * 发送数据 * @param buffer 需要发送字符串或者字符数组 * @param size 数据字节数 * @return size_t 成功写入发送缓冲区的字节数 */ size_t write(const char *buffer, size_t size) /** * 发送数据 * @param stream 数据流,比如文件流 * @return size_t 成功写入发送缓冲区的字节数 */ size_t write(Stream& stream);

注意点:

write(uint8_t)函数是发送数据的底层方法,也就是说print、println底层也是调用write;

write(const char str) 函数底层是调用 write(const char buffer, size_t size),通过strlen计算长度;

size_t write(const char *str) { if(str == NULL) return 0; return write((const uint8_t *) str, strlen(str)); } 3.2.2 print - 发送数据到client连接的server

函数说明:

/** * 发送数据 * @param FlashStringHelper 需要发送的字符串,字符串存在flash中(PROGMEM) * @return size_t 成功写入发送缓冲区的字节数 */ size_t print(const __FlashStringHelper *); /** * 发送数据 * @param String 需要发送的字符串,字符串存在内存中 * @return size_t 成功写入发送缓冲区的字节数 */ size_t print(const String &); /** * 发送数据 * @param String 需要发送的字符数组,字符数组存在内存中 * @return size_t 成功写入发送缓冲区的字节数 */ size_t print(const char[]); /** * 发送数据 * @param String 需要发送的字符 * @return size_t 成功写入发送缓冲区的字节数 */ size_t print(char); /** * 发送数据 * @param String 需要发送的数据,多是数字,转成对应的进制,一般都是传输数字型数据 * @return size_t 成功写入发送缓冲区的字节数 */ size_t print(unsigned char, int = DEC); size_t print(int, int = DEC); size_t print(unsigned int, int = DEC); size_t print(long, int = DEC); size_t print(unsigned long, int = DEC); size_t print(double, int = 2);

注意点:

读者需要特别关注 print(const __FlashStringHelper *) 这个函数,以后代码内存优化需用用到;
常见用法:

//实例代码 非完整代码 不可直接使用 理解即可 WiFiClient client; client.print( F("This is an flash string")); //字符串“This is an flash string”存在于flash 3.2.3 println - 发送数据到client连接的server

函数说明:

/** * 发送数据,并且加上换行符 "\r\n" * @param FlashStringHelper 需要发送的字符串,字符串存在flash中(PROGMEM) * @return size_t 成功写入发送缓冲区的字节数 */ size_t println(const __FlashStringHelper *); /** * 发送数据,并且加上换行符 "\r\n" * @param String 需要发送的字符串,字符串存在内存中 * @return size_t 成功写入发送缓冲区的字节数 */ size_t println(const String &s); /** * 发送数据,并且加上换行符 "\r\n" * @param String 需要发送的字符数组,字符数组存在内存中 * @return size_t 成功写入发送缓冲区的字节数 */ size_t println(const char[]); /** * 发送数据,并且加上换行符 "\r\n" * @param String 需要发送的字符 * @return size_t 成功写入发送缓冲区的字节数 */ size_t println(char); /** * 发送数据,并且加上换行符 "\r\n" * @param String 需要发送的数据,多是数字,转成对应的进制,一般都是传输数字型数据 * @return size_t 成功写入发送缓冲区的字节数 */ size_t println(unsigned char, int = DEC); size_t println(int, int = DEC); size_t println(unsigned int, int = DEC); size_t println(long, int = DEC); size_t println(unsigned long, int = DEC); size_t println(double, int = 2); /** * 发送换行符 "\r\n" * @return size_t 成功写入发送缓冲区的字节数 */ size_t println(void);

注意点:

println系列其实就是在print系列的基础上加上了换行符 "\r\n";

3.3 响应操作 3.3.1 available() - 返回接收缓存区可读取字节数

函数说明:

/** * 返回接收缓存区可读取字节数 * @return int 接收缓冲区可读取字节数 */ int available();

注意点:

通过此方法,我们可以判断发送出去的请求是否有响应信息;

3.3.2 availableForWrite() - 返回发送缓冲区剩余可写字节数

函数说明:

/** * 返回发送缓冲区剩余可写字节数 * @return int 发送缓冲区剩余可写字节数 */ size_t availableForWrite();

注意点:

一般来说,调用发送数据操作之后,并不会立刻发送出去,而是把数据放入发送缓冲区,通过机制不断读取发送缓冲区的数据不断发送出去;

可以通过此函数判断请求是否发送完毕;

3.3.3 read() - 读取接收缓冲区一个字节

函数说明:

/** * 读取接收缓冲区一个字节 * @return int 一字节数据 */ int read();

注意点:

此函数读取完数据后,会把该数据从缓冲区清掉;

3.3.4 read(buf,size) - 读取接收缓冲区size大小的字节数据

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzpgfx.html