最后,就是通过NC_NetStart()函数来开启网络了。
这个函数会根据前面几篇中的配置过程与配置的参数启动NDK网络,同时它会创建以下三个回调函数:
网络启动时只运行一次的函数,创建自己的应用程序线程:
void (*NetStart)()
网络被关闭时只运行一次的函数,删除创建的应用程序线程:
void (*NetStop)()
当IP地址改变时运行的函数:
void (*NetiP)(IPN,uint,uint)
程序实现如下:
- do
- {
- rc = NC_NetStart(hCfg, NetworkOpen, NetworkClose, NetworkIPAddr);
- } while(rc > 0);
复制代码
启动函数NetworkOpen中用TaskCreate函数创建了4个网络应用进程的。
- hEcho = TaskCreate(echosrv, "EchoSrv", OS_TASKPRINORM, 0x1400, 0, 0, 0);
- hData = TaskCreate(datasrv, "DataSrv", OS_TASKPRINORM, 0x1400, 0, 0, 0);
- hNull = TaskCreate(nullsrv, "NullSrv", OS_TASKPRINORM, 0x1400, 0, 0, 0);
- hOob = TaskCreate(oobsrv, "OobSrv", OS_TASKPRINORM, 0x1000, 0, 0, 0);
复制代码
函数中的进程EchoSrv、DataSrv、NullSrv、OobSrv在ndk的安装目录中可以找到,对应的路径为:ndk_2_21_02_43\packages\ti\ndk\tools\servers文件夹。
而NetworkClose函数,关闭这四个服务,并删除任务。
- void NetworkClose()
- {
- // 关闭会话
- fdCloseSession(hOob);
- fdCloseSession(hNull);
- fdCloseSession(hData);
- fdCloseSession(hEcho);
- // 关闭控制台
- ConsoleClose();
- // 删除任务
- TaskSetPri(TaskSelf(), NC_PRIORITY_LOW);
- TaskDestroy(hOob);
- TaskDestroy(hNull);
- TaskDestroy(hData);
- TaskDestroy(hEcho);
- }
复制代码
NetworkIPAddr()函数用来同步网络任务,该网络任务需要在执行前设置一个本地IP地址。
这个函数有三个参数分别为:
IPAddr 增加或者移除的IP地址
IFIndex 外设接口获取或者移除IP地址的标识
fAdd 增加一个IP地址时设为1,移除IP地址时设为0
经过上面的配置,就将NDK的网络启动起来了。现在可以进行测试了。
这里使用了DHCP进行IP自动分配。
在浏览器中打开192.168.1.117可以看到之前帖子里新建的网页界面。
|