我正在使用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方。
答案 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
)。