TI中文支持网
TI专业的中文技术问题搜集分享网站

6655 Tcp收发数据问题

各位好,我是用官方的client例程来调试的,NDK启动函数里创建了以下几个服务:

    hEcho = DaemonNew( SOCK_STREAMNC, 0, 7, dtask_tcp_proc,//dtask_tcp_echo,
                       OS_TASKPRINORM, OS_TASKSTKNORM, 0, 3 );
    hEchoUdp = DaemonNew( SOCK_DGRAM, 0, 7, dtask_udp_proc,//dtask_udp_echo,
                          OS_TASKPRINORM, OS_TASKSTKHIGH, 0, 1 );//OS_TASKSTKNORM,换成更大的堆栈大小
    hData = DaemonNew( SOCK_STREAM, 0, 1000, dtask_tcp_datasrv,
                       OS_TASKPRINORM, OS_TASKSTKNORM, 0, 3 );
    hNull = DaemonNew( SOCK_STREAMNC, 0, 1001, dtask_tcp_nullsrv,
                       OS_TASKPRINORM, OS_TASKSTKNORM, 0, 3 );
    hOob  = DaemonNew( SOCK_STREAMNC, 0, 999, dtask_tcp_oobsrv,
                       OS_TASKPRINORM, OS_TASKSTKNORM, 0, 3 );

对于上面创建的第一个tcp的回调函数dtask_tcp_echo,里面设置了socket的参数,然后收到数据,再发送出去,最后会fdClose( s )掉这个socket。

    to.tv_sec  = 5;
    to.tv_usec = 0;
    setsockopt( s, SOL_SOCKET, SO_SNDTIMEO, &to, sizeof( to ) );
    setsockopt( s, SOL_SOCKET, SO_RCVTIMEO, &to, sizeof( to ) );

   …

    fdClose( s );

我在上位机用网络助手发送数据,发现进行网络连接后,会进入到这个回调函数,如果在5s内部发数,这个函数运行完成就会关闭socket,连接就断开了。收到数,发完,5s后内没数据了,也会断开。

现在我的问题是,我想要tcp一直处于连接状态,于是我把fdclose断开了,确实上位机显示一直在连接状态,但是因为这个回调函数是只有在对tcp创建连接的时候才会进来,那之后我再发送数据,我就进不来这个回调函数了,就没有办法接收数据了。我想请问一下,应该怎么处理?这个回调函数可以改动成只要收到数据就进入嘛?或者是我得另外创建一个线程专门监听这个socket?

Shine:

请关注下面e2e上的回复。
e2e.ti.com/…/886464

赞(0)
未经允许不得转载:TI中文支持网 » 6655 Tcp收发数据问题
分享到: 更多 (0)