这是一个mplab和声代码,我试图在客户端接收数据,我想从服务器插座控制LED,文本"START“将打开LED,"STOP”将关闭LED,当我调试代码时,它显示Appbuffer80有所有null变量,ACK[] =最后一个变量是null \0,在AOK[].I中也是一样。我想知道这是一个正确的比较字符串的方法,就像我在这里写的代码一样。因为当我调试代码时,它会转义此行并跳转到服务器任务init()。请帮帮我。
case APP_TCPIP_WAIT_FOR_RESPONSE:
{
char Appbuffer[80];
static const char ACK[]="START";
static const char AOK[]="STOP";
memset(Appbuffer, 0, sizeof(Appbuffer));
if (!TCPIP_TCP_IsConnected(appData.clientSocket))
{
SYS_CONSOLE_MESSAGE("\r\nConnection Closed\r\n");
appData.clientState = APP_TCPIP_WAITING_FOR_COMMAND;
break;
}
if (TCPIP_TCP_GetIsReady(appData.clientSocket))
{
TCPIP_TCP_ArrayGet(appData.clientSocket, (uint8_t*)Appbuffer, sizeof(Appbuffer) - 1);
SYS_CONSOLE_PRINT("%s", Appbuffer);
if(!strcmp(Appbuffer, ACK)) //// breakpoint
{
BSP_LEDStateSet(BSP_LED_1,BSP_LED_STATE_ON);
BSP_LEDStateSet(BSP_LED_2,BSP_LED_STATE_ON);
BSP_LEDStateSet(BSP_LED_3,BSP_LED_STATE_ON);
}
else if(!strcmp(Appbuffer, AOK)) // breakpoint
{
BSP_LEDStateSet(BSP_LED_1,BSP_LED_STATE_OFF);
appData.serverState = APP_TCPIP_CLOSING_CONNECTION;
SYS_CONSOLE_MESSAGE("Connection was closed\r\n");
}
}
}发布于 2018-01-23 15:07:44
由于调用了函数memset,AppBuffer的值全部为空。在您发布的代码中,我没有看到AppBuffer被赋值。因此,AppBuffer本质上是一个长度为零的字符串,因此当您将其与AOK进行比较时,结果为false。
https://stackoverflow.com/questions/48395814
复制相似问题