微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > CC3200 TCP 编程

CC3200 TCP 编程

时间:10-02 整理:3721RD 点击:

我遇到一个问题,想请教你一下,

[size=1em]

[size=1em]?


[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的?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top