ESP8266 SMING TCP sendString()和writeString()之间的区别

时间:2016-02-02 02:48:23

标签: tcp esp8266 sming

我正在使用ESP8266和SMING framework

我在Telnet_TCPServer_TCPClient example中找到了此示例代码。

bool tcpServerClientReceive (TcpClient& client, char *data, int size)
{
   debugf("Application DataCallback : %s, %d bytes \r\n", client.getRemoteIp().toString().c_str(),size );
   debugf("Data : %s", data);
   client.sendString("sendString data\r\n", false);
   client.writeString("writeString data\r\n",0 );
   if (strcmp(data,"close") == 0)
   {
      debugf("Closing client");
      client.close();
   };
   return true;
}

此示例代码中sendString()writeString()之间的区别是什么?好像没什么区别。结果是将字符串数据发送到另一个TCP方。

1 个答案:

答案 0 :(得分:2)

示例中使用的客户端对象是TcpClient的实例,它又是TcpConnection对象的派生类。 TcpClient确实有.sendString方法,而.writeString方法是类TcpConnection的方法(父类TcpClient

实际上.writeString

有两种重载方法

因此,将所有信息排除在外,基本上.sendString执行此操作(在该方法中调用.send方法):

if (state != eTCS_Connecting && state != eTCS_Connected) return false;

if (stream == NULL)
    stream = new MemoryDataStream();

stream->write((const uint8_t*)data, len);
asyncTotalLen += len;
asyncCloseAfterSent = forceCloseAfterSent;

return true;

并且.write方法执行此操作:

   u16_t available = getAvailableWriteSize();
   if (available < len)
   {
       if (available == 0)
           return -1; // No memory
       else
           len = available;
   }

   WDT.alive();
   err_t err = tcp_write(tcp, data, len, apiflags);

   if (err == ERR_OK)
   {
        //debugf("TCP connection send: %d (%d)", len, original);
        return len;
   } else {
        //debugf("TCP connection failed with err %d (\"%s\")", err, lwip_strerr(err));
        return -1;
   }

所以从它的外观来看,一个是异步(.sendString)而另一个不是(.writeString)。