当前位置: 首页 > news >正文

DSP 开发例程(5): tcp_server

目录

  • DSP 开发例程(5): tcp_server
    • 创建工程
    • 源码编辑
      • tcp_echo.c
      • helloWorld.c
    • 调试
    • 说明

DSP 开发例程(5): tcp_server

此例程实现在 EVM6678L 开发板上创建 TCP Server进程, 完成计算机与开发板之间的 TCP/IP 通信. 例程源码可从我的 gitee 仓库上克隆或下载. 点击 DSP 开发教程(0): 汇总查看其他例程说明.

创建工程

此例程在官方提供的UDP通信例程基础上修改.

  • Project Explorer 视图中, 右键选择: Import

在这里插入图片描述

  • 选择 Existing CCS Eclipse Projects, 点击 Next.

在这里插入图片描述

  • 点击 Browse, 选择 mcsdk_###_#\examples 所在目录, 勾选 helloworld_evmc6678l 工程, 勾选 Copy projects into workspace, 点击 Finish.
    在这里插入图片描述
  • 复制 mcsdk_###_#\examples\ndk\helloWorld 目录下的四个 .c 源文件.
    在这里插入图片描述- 选择刚导入的工程, 右键选择: Paste, 粘贴刚刚复制的四个 .c 源文件到此工程中. 在弹出的 Question 对话框中点击 Yes To All, 完成替换.

在这里插入图片描述
在这里插入图片描述

  • 将此工程重命名为: tcp_server.

在这里插入图片描述
在这里插入图片描述

源码编辑

tcp_echo.c

  • 新建名为 tcp_echo.c 的源文件.
    在这里插入图片描述

在这里插入图片描述

  • 文件内容如下:
#include <ti/ndk/inc/netmain.h>int dtask_tcp_echo(SOCKET s, UINT32 unused)
{struct timeval to;int I;char *pBuf;HANDLE hBuffer;(void)unused;// Configure our socket timeout to be 5 secondsto.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));I = 1;setsockopt(s, IPPROTO_TCP, TCP_NOPUSH, &I, 4);for (;;){I = (int)recvnc(s, (void **)&pBuf, 0, &hBuffer);// If we read data, echo it backif (I > 0){if (send(s, pBuf, I, 0) < 0)break;recvncfree(hBuffer);}// If the connection got an error or disconnect, closeelsebreak;}fdClose(s);// Return "0" since we closed the socketreturn (0);
}

其中, dtask_tcp_echo() 完成 TCP 数据的收发.

这段代码可以在 ti\ndk_###_#\docs\spru524i.pdf 的 5.4.2 节 中找到.

helloWorld.c

  • 打开 helloWorld.c 文件.
  • 在其中添加 dtask_tcp_echo() 的外部声明.
extern int dtask_tcp_echo(SOCKET s, UINT32 unused);

在这里插入图片描述

  • 修改 NetworkOpen() 函数, 将 dtask_udp_hello() 函数句柄添加到守护进程中.
static void NetworkOpen()
{// Create our local serverhHello = DaemonNew( SOCK_STREAMNC, 0, 7, dtask_tcp_echo,OS_TASKPRINORM, OS_TASKSTKNORM, 0, 3 );
//    hHello = DaemonNew( SOCK_DGRAM, 0, 7, dtask_udp_hello,
//                       OS_TASKPRINORM, OS_TASKSTKNORM, 0, 1 );
}

在这里插入图片描述

  • 查看计算机的以太网IP, 将 开发板的IP 修改到同一个网段.(此例程中, 我的IP为192.168.0.11).
    在这里插入图片描述
    保存上述修改, 并编译工程.

调试

  • EVM6678L 开发板 通过网线与 计算机连接.
  • 连接仿真器.
  • 开发板上电, 导入程序并运行. 此时在 Console 窗口能看到如下信息.
    在这里插入图片描述
  • 打开 命令提示符 窗口, 运行 ping 命令, 查看与开发板的网络连接是否正常.
    在这里插入图片描述
  • 打开 tera term, 选择 TCP/IP连接, 修改 HostLocalIPAddr设置的地址, TCP端口设置为 7. (也可以使用 putty 或其他测试工具进行连接.)

在这里插入图片描述

  • 选择菜单: Setup | Terminal, 勾选 Local echo.
     wo'r
  • 在终端中输入一串字符后回车, 可以看到 开发板 TCP 服务进程回传的字符串.自此说明 TCP Server 能够正常运行.
    在这里插入图片描述

说明

  • DaemonNew() 的第三个参数为 监听端口, 我们可以修改它来指定服务器端口.

相关文章:

  • Angular-04:指令
  • Java使用OkHttp库采集电商视频简单代码示例
  • 深入理解强化学习——强化学习的历史:时序差分学习
  • FFmpeg 从视频流中抽取图片
  • H5 Vue跳转小程序
  • Nginx 的配置文件(负载均衡,反向代理)
  • linux中断下文工作队列之工作队列传参(中断七)
  • css文字竖向排列
  • 部署K8S
  • Vue 3.0 学习 新特性
  • Python-platform模块
  • 1-1 暴力破解-枚举
  • 代码之困:那些让你苦笑不得的bug
  • html和css中图片加载与渲染的规则是什么?
  • 系列四十五、Spring的事务传播行为案例演示(五)#MANDATORY
  • Javascript基础之Array数组API
  • QQ浏览器x5内核的兼容性问题
  • React Native移动开发实战-3-实现页面间的数据传递
  • select2 取值 遍历 设置默认值
  • 力扣(LeetCode)56
  • 设计模式 开闭原则
  • 用Visual Studio开发以太坊智能合约
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #Linux(帮助手册)
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (三)c52学习之旅-点亮LED灯
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • ****Linux下Mysql的安装和配置
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .net framework profiles /.net framework 配置
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • @Transaction注解失效的几种场景(附有示例代码)
  • [bzoj1901]: Zju2112 Dynamic Rankings
  • [C#] 如何调用Python脚本程序
  • [C#][DevPress]事件委托的使用
  • [Django ]Django 的数据库操作
  • [HTML API]HTMLCollection
  • [leetcode]56. Merge Intervals归并区间
  • [linux c]linux do_div() 函数用法
  • [LOJ161] 仙人掌计数
  • [MAC OS] 常用工具
  • [math]判断线段是否相交及夹角
  • [NOIP2011DAY1P1]铺地毯
  • [objective-c]关于KVC--KVO--KVB
  • [OC]UILabel 文字长的截断方式
  • [P3097] [USACO13DEC] [BZOJ4094] 最优挤奶Optimal Milking 解题报告(线段树+DP)