各位工程师好:
我想使用C6655作为服务器与上位机进行数据传输。
按照官方给的例程,用DaemonNew函数创建了一个进程,得到了一个socket,如下:
hEcho = DaemonNew( SOCK_STREAMNC, 0, 7,dtask_tcp_echo,OS_TASKPRINORM, OS_TASKSTKNORM, 0, 3 );
这个创建的线程,回调函数dtask_tcp_echo是在上位机作为tcp的client端来与6655进行连接时进入的,进入以后,开始接收上位机数据,接收超时或者接收到数据后就关闭socket然后退出,等待下一次链接再进入这个函数。
现在,我用6655与上位机通信,不想要每次上位机发送数据过来都需要进行tcp的重新连接,所以我改动了回调函数的代码,如下:
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 ) );
setsockopt( s, IPPROTO_TCP, NDK_TCP_NOPUSH, &i, 4 );
s_send = s;
for(;;)
{
i = (int)recvnc( s, (void **)&pBuf, 0, &hBuffer );
/* If we read data, echo it back */
if( i == 0 ) //connection broken
{
break;
}
else if( i == -1 ) //receive timeout
{
/* If the connection got an error or disconnect, close */
else if( i > 0 ) //receive data and echo
{
if( send( s, pBuf, i, 0 ) < 0 )
}
fdClose( s );
test_send()
{
char pBuf[] = "hello,world\n";
Uint32 i;
while(1)
{
Semaphore_pend(sem1, BIOS_WAIT_FOREVER);
if( (i =send( s_send, pBuf, strlen(pBuf), 0 )) < 0 )
{
System_printf("send failed\n");
}
}
}
但是在这个线程里数据发送永远是失败的,返回值永远为-1.从这个线程退出后返回到上一个tcp的回调函数里,数据都是可以正常发送的,我仔细确认了,两个socket的首地址都是一样的。
我的问题是:
1、上面的情况要怎么修改才能正确发送数据啊?
2、6655没法作为tcp的server端在连接成功后主动发送数据嘛?
Shine:
看到e2e上NDK team的工程师一直在跟进您的问题,请耐心等待他们的回复。
e2e.ti.com/…/886464