[size=1em]1
[size=1em]2
[size=1em]3
[size=1em]4
[size=1em]5
[size=1em]6
[size=1em]7
[size=1em]8
[size=1em]9
[size=1em]10
[size=1em]11
[size=1em]12
[size=1em]13
[size=1em]14
[size=1em]15
[size=1em]16
[size=1em]17
[size=1em]18
[size=1em]19
[size=1em]20
[size=1em]21
[size=1em]22
[size=1em]23
[size=1em]24
[size=1em]25 | [size=1em][size=1em]if (g_ucUARTBuffer[0]!=0) //串口的额数据 [size=1em] { [size=1em] // sending packet Ibcon的数据 [size=1em] iStatus = sl_Send(iSockID1, g_ucUARTBuffer, sizeof(g_ucUARTBuffer), 0 );//发送TCP数据 [size=1em] if(iStatus<=0) [size=1em] { [size=1em] ASSERT_ON_ERROR(sl_Close(iSockID1)); [size=1em] ASSERT_ON_ERROR(TCP_CLIENT_FAILED); [size=1em] } [size=1em] memset(g_ucUARTBuffer, 0, sizeof(g_ucUARTBuffer)); [size=1em] } [size=1em] //接收来自服务器的TCP数据。 [size=1em] iStatus = sl_Recv(iSockID1,g_cBsdbuf,sizeof(g_cBsdbuf),0); [size=1em] if(iStatus > 0) [size=1em] { [size=1em] UART_PRINT("recv ok\n"); [size=1em] UART_PRINT(">>>%s\r\n", g_cBsdbuf); [size=1em] [size=1em] } [size=1em] else [size=1em] { [size=1em] ASSERT_ON_ERROR(sl_Close(iSockID1)); [size=1em] ASSERT_ON_ERROR(TCP_CLIENT_FAILED); [size=1em] } [size=1em] memset(g_cBsdbuf, 0, sizeof(g_cBsdbuf));
单独的发送和接收都可以,当一起运行的时候,就会出现,当串口数据发送时候,服务器那边没有显示接收的数据,只有当服务器那边发送数据的时候,才会显示出从串口发过来的数据,这是为什么? 有什么解决方法吗?
程序是这样写的 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));
貌似是RECV()函数是阻塞的,有没有什么方法可以解决,比较急!谢谢
recv是阻塞的话用多线程啊 或者直接使用socket的select函数,了解一下这个函数吧
多线程或者使用select函数
_i16 sl_Select(_i16 nfds, SlFdSet_t *readsds, SlFdSet_t *writesds, SlFdSet_t *exceptsds, struct SlTimeval_t *timeout);这个函数中参数我怎么设置才能处理这个情况
你能根据我上面的程序,帮我写一下吗?
不懂! 路过还是帮你顶下!
还有就是如果用多线程的,我TCP连接可以在每一个线程中都连接一遍吗?
用多线程的话,目前仅仅是接收部分,当然了连接开始连接一次就行了‘ 等你都搞通了在慢慢优化吧,还需要实现重连机制的嘛,这是基本的了
一点点来吧,socket编程,可以找些文章看看在动手,你现在基础有些问题 select要理解了才能用起来,你理解了么
楼上是玩Arduino的?
Top
|