ESP8266 SMING TCP sendString() 和 writeString() 的区别
Difference between ESP8266 SMING TCP sendString() and writeString()
我正在使用 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。
示例中使用的客户端对象是 TcpClient
的一个实例,后者又是 TcpConnection
对象的派生 class。 TcpClient
确实有一个 .sendString
method and the .writeString
方法是 class TcpConnection
的一个方法(TcpClient
的父 class)
其实.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
)。
我正在使用 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。
示例中使用的客户端对象是 TcpClient
的一个实例,后者又是 TcpConnection
对象的派生 class。 TcpClient
确实有一个 .sendString
method and the .writeString
方法是 class TcpConnection
的一个方法(TcpClient
的父 class)
其实.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
)。