0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术基于嵌入式Linux的网络终端应用程序设计介绍

英创信息技术 来源:英创信息技术 作者:英创信息技术 2019-11-18 09:40 次阅读

EM9160具有丰富的通讯接口,可以支持基于以太网和PPP(如GPRS/CDMA)的网络应用。本文主要介绍EM9160作为TCP客户端方式的应用示例:Step4_TCPClient。

TCP客户端Socket编程流程

在利用Socket进行TCP客户端编程时,建立TCP连接的过程一般比较简单,首先客户端调用socket()函数建立流式套接字,然后调用connect()函数请求服务器端建立TCP连接,成功建立连接后即可与服务器端进行TCP/IP数据通讯,流程如下:

TCPClient应用示例

Step4_TCPClient是一个具有自动管理功能的TCP客户端应用示例。作为TCP客户端主动和服务器端建立TCP连接的过程编程相对简单,直接调用相关的Socket函数即可,建立TCP连接的功能封装在CTCPClient类中。嵌入式的应用场合大多是处于长期运行无人值守的状态,可能会遇到需要一直保持TCP客户端连接的情况,Step4_TCPClient例程基于这种需求,专门封装了一个CTCPClientManager管理类对TCPClient的连接进行自动管理,包括启动建立TCP的客户端连接、查询TCP连接的状态、添加多个TCP客户端连接等功能。

CTCPClient类

CTCPClient类定义在TCPClient.H文件下,该类提供了4个公共函数,以及一个数据通讯线程,调用该类中的相关函数与TCP服务器端建立连接。

class CTCPClient

{

private:

pthread_t m_thread; //通讯线程标识符ID

//数据通讯处理线程函数

static int SocketThreadFunc( void*lparam );

public:

// TCP通讯Socket

int m_sockfd;

int m_sockclose;

int m_ExitThreadFlag;

//远程主机IP地址

char m_remoteHost[255];

//远程主机端口

int m_port;

char RecvBuf[1500];

int m_nRecvLen;

public:

CTCPClient();

virtual ~CTCPClient( );

//打开创建客户端socket

int Open( char* ServerIP, int ServerPort );

//关闭客户端socket

int Close( );

//与服务器端建立连接 并创建数据通讯处理线程

int Connect();

//向服务器端发送数据

int SendData( char * buf , int len);

};

Open函数执行创建打开socket操作,并设置远端TCP服务器的IP和端口。

Connect函数调用connect( )与远端TCP服务器建立连接,调用select( )等待TCP连接的建立,TCP连接建立成功,则创建TCP数据通讯处理线程。

SocketThreadFunc函数是实现TCP连接数据通讯的核心代码,在该函数中调用select( ),等待TCP连接的通讯数据,对于接收的TCP连接数据的处理也是在该函数中实现,在本例程中处理为简单的数据回发,用户可结合实际的应用修改此处代码。流程如下:

CTCPClientManager类

TCP客户端连接定义为四个状态:

enum CONNSTATE{ csWAIT, csINIT, csCLOSED, csOPEN };其中csOPEN表明TCP客户端连接建立。

CTCPClientManager所封装的功能函数就是根据连接的各个状态对TCP客户端连接进行管理,CTCPClientManager类定义在TCPClientManager.H文件下。

class CTCPClientManager

{

private:

// TCPClient连接管理线程

static int TCPClientThreadFunc( void* lparam );

public:

TCPCLIENT_INFO m_TCPClientInfo[TCPCLIENT_MAX_NUM];

pthread_t m_thread[TCPCLIENT_MAX_NUM];

int m_nTCPClientNum;

public:

CTCPClientManager( );

~CTCPClientManager();

//添加TCP客户端连接对象,输入参数为TCP服务器的IP和端口

int AddTCPClientObject( char* pHostIP, int nHostPort );

//删除所有TCP客户端连接对象

int DeleteAllTCPClient( );

//设置TCP客户端连接对象为csINIT状态

int Open( int Idx );

//获取TCP客户端连接状态

int GetTCPClientState( int Idx );

//启动TCPClient连接管理操作,并创建TCPClient连接管理线程

int Start( );

//关闭TCPClient连接管理操作

int Stop( );

};

TCPClientThreadFunc函数是实现对TCP连接状态管理操作的核心代码,由于Linux下sleep的最小单位为秒,对于毫秒级的延时等待,在该函数中利用调用select( )设置相关的时间参数来实现。流程如下:

CTCPClientManager类的调用

CTCPClientManager类的具体使用过程:首先调用类中定义AddTCPClientObject加载TCP连接对象,然后调用类中定义Start函数来启动TCP连接自动管理线程,Open函数将TCP连接状态设置为csINIT状态。本例程中主循环的操作为每隔1s查询TCPClient连接的状态,如果状态为csWait,程序调用Open函数将其设置为csINIT状态,则TCPC连接管理线程将自动进行与TCP服务器端建立连接的操作。

以下为Step4_TCPClient.cpp中的相关代码。

class CTCPClientManager TCPClntManager;

int main()

{

int i1, i2, i3;

//添加一个TCP客户端连接对象

TCPClntManager.AddTCPClientObject( ‘192.168.201.121’, 1001 );

//启动TCPClient连接管理操作,并创建TCPClient连接管理线程

TCPClntManager.Start();

for( i1=0; i1 {

//设置TCP客户端连接初始状态,连接管理线程将自动进行TCP的连接操作

TCPClntManager.Open(i1);

}

for(i1=0; i1《10000; i1++)

{

sleep(1);

for( i2=0; i2 {

// 查询TCP客户端连接状态

i3 = TCPClntManager.GetTCPClientState(i2);

printf( ‘TCP Connect%d State: %d \n’, i2+1, i3 );

if( i3==0 )

{

//设置TCP客户端连接初始状态,连接管理线程将自动进行TCP连接操作

TCPClntManager.Open( i2 );

}

}

}

return 0;

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11215

    浏览量

    208754
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6084

    浏览量

    35164
收藏 人收藏

    评论

    相关推荐

    嵌入式linux开发的基本步骤有哪些?

    嵌入式Linux开发是一个复杂的过程,涉及到硬件选择、操作系统移植、驱动开发、应用程序开发等多个方面。以下是嵌入式Linux开发的基本步骤,
    的头像 发表于 09-02 09:11 357次阅读

    嵌入式linux开发板怎么操作

    嵌入式Linux开发板是一种基于Linux操作系统的嵌入式系统开发平台。它通常包括一个处理器、内存、存储器、输入/输出接口等硬件组件,以及一个基于L
    的头像 发表于 09-02 09:09 307次阅读

    嵌入式linux开发板芯片的工作原理

    嵌入式Linux开发板是一种基于Linux操作系统的嵌入式系统开发平台,它广泛应用于工业控制、智能家居、智能交通、医疗设备等领域。 嵌入式
    的头像 发表于 09-02 09:07 306次阅读

    C28x嵌入式应用程序二进制接口

    电子发烧友网站提供《C28x嵌入式应用程序二进制接口.pdf》资料免费下载
    发表于 08-31 09:39 0次下载
    C28x<b class='flag-5'>嵌入式</b><b class='flag-5'>应用程序</b>二进制接口

    开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束

    。 湖南大学教授、嵌入式网络计算湖南省重点实验室主任谢国琪做了“国产异构计算平台的‘五合一’智能计算开发创新实践”的专题报告。谢国琪介绍国产异构计算平台技术特点,以及在国产异构计算平
    发表于 08-30 17:24

    MSP430嵌入式应用程序二进制接口

    电子发烧友网站提供《MSP430嵌入式应用程序二进制接口.pdf》资料免费下载
    发表于 08-30 11:43 0次下载
    MSP430<b class='flag-5'>嵌入式</b><b class='flag-5'>应用程序</b>二进制接口

    C6000嵌入式应用程序二进制接口

    电子发烧友网站提供《C6000嵌入式应用程序二进制接口.pdf》资料免费下载
    发表于 08-29 14:52 0次下载
    C6000<b class='flag-5'>嵌入式</b><b class='flag-5'>应用程序</b>二进制接口

    飞凌嵌入式技术创新日(深圳站)精彩回顾

    工的分享,则更加侧重于嵌入式技术的研发和创新,为与会者提供了新的问题解决思路;最后,粤港澳大湾区国中心技术专家的温老师 介绍了openEu
    发表于 08-28 09:06

    Linux是做什么用的?

    流行,因为它稳定、安全且可靠。许多大型互联网公司和数据中心都使用Linux作为服务器操作系统,用于托管网站、数据库、应用程序等。 2、嵌入式系统:Linux可以被
    发表于 04-28 15:40

    嵌入式人工智能的就业方向有哪些?

    操作系统使用及C高级编程 数据结构与算法 二:嵌入式Linux应用工程师,Linux网络开发工程师 文件IO 并发程序设计 项目实战:基于
    发表于 02-26 10:17

    嵌入式软件开发应该掌握哪些知识?

    两个部分组成,其中嵌入式软件是指在嵌入式系统中运行的程序,用于控制硬件并提供特定的功能和服务。嵌入式软件应用广泛,包括汽车、医疗设备、智能家居、智能穿戴、工业自动化等众多领域。 二、
    发表于 02-19 11:23

    【从0开始创建AWTK应用程序】编译应用到嵌入式Linux平台运行

    。搭建Linux平台交叉编译环境在上一篇文章我们介绍了使用AWTK开发简单的应用并在PC上模拟运行,本篇文章就来介绍一下怎么让应用程序运行在嵌入式
    的头像 发表于 12-07 12:08 655次阅读
    【从0开始创建AWTK<b class='flag-5'>应用程序</b>】编译应用到<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>平台运行

    嵌入式Linux应用程序开发详解-第3章

    电子发烧友网站提供《嵌入式Linux应用程序开发详解-第3章.pdf》资料免费下载
    发表于 11-16 11:19 0次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>应用程序</b>开发详解-第3章

    嵌入式Linux应用程序开发详解-第2章

    电子发烧友网站提供《嵌入式Linux应用程序开发详解-第2章.pdf》资料免费下载
    发表于 11-16 11:18 0次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>应用程序</b>开发详解-第2章

    嵌入式Linux应用程序开发详解-第1章

    电子发烧友网站提供《嵌入式Linux应用程序开发详解-第1章.pdf》资料免费下载
    发表于 11-16 11:17 0次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>应用程序</b>开发详解-第1章