各位大佬,小弟遇到如下的问题,麻烦大佬们解惑。这个是我在官方的TCP例程上面修改的程序的一个tcp例程,把发送放在了另外一个线程里面,刚开始PC客服端能够正常接收和发送数据给dsp服务器,但是这样连续工作过半分钟左右吧,就会自动掉线,并且pc客服端ping不同服务器,我修改过ndk里面的接收和发送缓冲区大小,并没有改变这一情况
void tcp_test_fun(UArg a0, UArg a1)//发送线程
{
while(1)
{
if(kkkk==99)
{
SOCKET s = tcp_socket; // 从全局套接字TcpSocket获取套接字s的副本
Task_sleep(1);
if(Semaphore_getCount(sem) == 0);
Semaphore_pend(sem, BIOS_WAIT_FOREVER);
System_flush();
if(mmmm==99)
{
fdOpenSession(TaskSelf());
send(s, &Title, 1, 0);
recvncfree(hBuffer);
fdCloseSession(TaskSelf());
mmmm=0;
}
Semaphore_post(sem);
System_flush();
// 休眠以允许低优先级任务执行
Task_sleep(1);
// kkkk=0;
}
}
}
/****************************************************************************/
/* */
/* 回调函数 TCP Server Daemon */
/* */
/****************************************************************************/
int TcpTest(SOCKET s, UINT32 unused)//tcp的回调函数
{
struct timeval to;
int i;
char *pBuf;
// 配置超时时间 5s
to.tv_sec = 3600*24;
to.tv_usec = 0;
setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, &to, sizeof(to));
setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &to, sizeof(to));
// 发送一个固定字符串 长度 38
System_flush();
kkkk=99;
for(;;)
{
i = (int)recvnc(s, (void **)&pBuf, 0, &hBuffer);
// 回传接收到的数据
if(i > 0)
{
tcp_socket=s;
Title=Title+1;
mmmm=99;
// kkkk=99;
// if(mmmm==0)
// {
// if(send(tcp_socket, Title, 5, 0 ) < 0)
// break;
// mmmm=99;
// }
System_flush();
recvncfree(hBuffer);
}
else
{
break;
}
}
fdClose(s);
return(0);
}