首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ESP8266 SMING ()和writeString()的区别

ESP8266 SMING ()和writeString()的区别
EN

Stack Overflow用户
提问于 2016-02-02 02:48:23
回答 1查看 273关注 0票数 0

我使用的是ESP8266和SMING框架

我在TCPClient实例中找到了这个示例代码。

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-02 15:28:36

示例中使用的客户端对象是TcpClient的一个实例,该实例依次是来自TcpConnection对象的派生类。TcpClient有一个.sendString方法,而.writeString方法是类TcpConnection (TcpClient的父类)的一个方法。

实际上,对于.writeString有两种重载方法

因此,在排除了所有这些信息之后,基本上.sendString会这样做(在该方法中,它调用了.send方法):

代码语言:javascript
复制
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方法是这样做的:

代码语言:javascript
复制
   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)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35144173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档