有没有人帮我看下下面这个程序 - TMS320C665x - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3155|回复: 0
打印 上一主题 下一主题

[未解决] 有没有人帮我看下下面这个程序

[复制链接]

10

主题

39

帖子

204

积分

中级会员

Rank: 3Rank: 3

积分
204
跳转到指定楼层
楼主
发表于 2017-4-26 21:25:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是在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();
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-4-29 11:55 , Processed in 0.034998 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表