我遇到一个问题,想请教你一下,
if (g_ucUARTBuffer[0]!=0)//串口的额数据{ // sending packet Ibcon的数据 iStatus = sl_Send(iSockID1, g_ucUARTBuffer, sizeof(g_ucUARTBuffer), 0 );//发送TCP数据 if(iStatus<=0) { ASSERT_ON_ERROR(sl_Close(iSockID1)); ASSERT_ON_ERROR(TCP_CLIENT_FAILED); } memset(g_ucUARTBuffer, 0, sizeof(g_ucUARTBuffer));} //接收来自服务器的TCP数据。iStatus = sl_Recv(iSockID1,g_cBsdbuf,sizeof(g_cBsdbuf),0);if(iStatus > 0){UART_PRINT("recv ok\n");UART_PRINT(">>>%s\r\n", g_cBsdbuf);}else{ASSERT_ON_ERROR(sl_Close(iSockID1));ASSERT_ON_ERROR(TCP_CLIENT_FAILED);}memset(g_cBsdbuf, 0, sizeof(g_cBsdbuf));
单独的发送和接收都可以,当一起运行的时候,就会出现,当串口数据发送时候,服务器那边没有显示接收的数据,只有当服务器那边发送数据的时候,才会显示出从串口发过来的数据,这是为什么?
有什么解决方法吗?
lei zhang14:
QQ445945370
dong zhang3:
回复 lei zhang14:
QQ:734679109
dong zhang3:
回复 lei zhang14:
能具体告知怎么解决吗?谢谢
yong zhang6:
iStatus = sl_Recv(iSockID1,g_cBsdbuf,sizeof(g_cBsdbuf),0);这一句死等服务器发的数据,直到有数据发过来,才会执行下一句
dong zhang3:
回复 yong zhang6:
那我如何解决,这个问题???
dong zhang3:
回复 yong zhang6:
能具体一点吗?解决方法
dong zhang3:
回复 yong zhang6:
可是我是Sl_send()函数在前面,按理说应该先运行这个函数才对啊,和Sl-recv()死等没关系吧
dong zhang3:
回复 yong zhang6:
能具体一点解决方法吗?
Yonghua Pan:
回复 dong zhang3:
能否把SOCKET设置成为nonblocking再测试一下,或者给recv设置timeout.
Yonghua Pan:
回复 dong zhang3:
long nonBlocking = 1;
iStatus = sl_SetSockOpt(SockID, SL_SOL_SOCKET, SL_SO_NONBLOCKING, \&nonBlocking,sizeof(nonBlocking));