|
我是在NDK_TCP的基础上修改的,建立了一个服务器,服务器是运行在NetOpenHook()函数下新建的TaskCreate(MyServerTest,)函数中,部分代码如下,在open_server()函数中建立了一个接收任务,但是运行过程中socket无法传递给TcpreceiveTask函数,表示所建立的TaskCreate(TcpreceiveTask,)无效,不知我这样用是否正确
#include <netmain.h>
#include <xdc/std.h>
#include <xdc/runtime/Error.h>
#include <xdc/runtime/System.h>
#include <ti/sysbios/BIOS.h>
#include <ti/sysbios/knl/Clock.h>
#include <ti/sysbios/knl/Task.h>
SOCKET s_socket;
void TcpReceiveTask(void );
Bool open_server(SOCKET s );
void MyServerTest(void)
{
struct sockaddr_in sin1;
SOCKET s;
//////////
int ret, size, i;
// 为任务分配文件描述符并打开一个会话
fdOpenSession(TaskSelf());
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(s == INVALID_SOCKET)
{
printf("failed socket create (%d)\n", fdError());
//goto error;
}
// Bind to the specified Server port
bzero( &sin1, sizeof(struct sockaddr_in) );
sin1.sin_family = AF_INET;
sin1.sin_len = sizeof( sin1 );
sin1.sin_addr.s_addr = INADDR_ANY;
sin1.sin_port = htons(1920);
if( bind( s,(PSA)&sin1, sizeof(sin1) ) < 0 )
{
fdClose( s );
s = INVALID_SOCKET;
printf("failed bind (%d)\n", fdError());
//goto error;
}
// If the socket is bound and TCP, start listening
if( s != INVALID_SOCKET )
{
if( listen( s, 5) < 0 )
{
fdClose( s );
s = INVALID_SOCKET;
printf("failed listen (%d)\n", fdError());
}
}
size = sizeof(sin1);
bzero( &sin1, sizeof(struct sockaddr_in) );
struct timeval to;
char pBuf[1024];
fd_set fdRead;
struct timeval aTime;
aTime.tv_sec = 15;
aTime.tv_usec = 0;
for(;;)
{
FD_ZERO(&fdRead);
FD_SET(s,&fdRead);
ret = fdSelect(16,&fdRead,NULL,NULL,&aTime);
if(ret > 0)
{
s_socket = accept(s , (PSA)&sin1, &size );
open_server(s_socket);
}
/* s_socket = accept(s , (PSA)&sin1, &size );
if(s_socket == INVALID_SOCKET)
{
printf("failed accept (%d)\n", fdError());
//goto error;
}
if(s_socket)
{
if(open_server(s_socket))
{}
}*/
}
/*hTask = TaskCreate(TcpTest , "TcpTest" , OS_TASKPRINORM , OS_TASKSTKNORM , 0 , 0 ,0);
if(!hTask)
fdClose( s);*/
// 关闭文件会话
//fdCloseSession(TaskSelf());
}
Bool open_server(SOCKET s )
{
HANDLE hTskR;
hTskR = TaskCreate(TcpReceiveTask , "TcpReceiveTask" , OS_TASKPRIHIGH , 0x1400 , 0 , 0 ,0);//OS_TASKSTKNORM
printf("TaskCreate\n");
//TcpReceiveTask();
return 1;
}
void TcpReceiveTask(void )
{
SOCKET clkSocket =s_socket;
char Title[] = "Tronlong Tcp Server Application ......";
//send(clkSocket, &Title, 38, 0);
while(1)
{
char recvBuf[1024];
int recvLen;
bzero(recvBuf,1024);
recvLen = recv(clkSocket,recvBuf, 1024,0);
if (recvLen == -1)
{
// fdClose(clkSocket);
//ResetList(clientSocket);
//break;
}
else if (recvLen == 0)
{
fdClose(clkSocket);
//ResetList(clientSocket);
break;
}
else
{
if(recvLen == 4) // HeartBeat
{
if(send(clkSocket, recvBuf, recvLen, 0 ) < 0)
break;
}
else
{
if(send(clkSocket, recvBuf, recvLen, 0 ) < 0)
break;
}
}
}
TaskExit();
}
|
|