我使用的是ESP8266和SMING框架。
我在TCPClient实例中找到了这个示例代码。
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。
发布于 2016-02-02 15:28:36
示例中使用的客户端对象是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)。
https://stackoverflow.com/questions/35144173
复制相似问题