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

    文章

    11123

    浏览量

    207908
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6081

    浏览量

    34942
收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

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

    。搭建Linux平台交叉编译环境在上一篇文章我们介绍了使用AWTK开发简单的应用并在PC上模拟运行,本篇文章就来介绍一下怎么让应用程序运行在嵌入式
    的头像 发表于 12-07 12:08 533次阅读
    【从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章

    基于嵌入式Linux内核的Android操作系统智能移动终端

    电子发烧友网站提供《基于嵌入式Linux内核的Android操作系统智能移动终端.pdf》资料免费下载
    发表于 11-06 10:07 0次下载
    基于<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>内核的Android操作系统智能移动<b class='flag-5'>终端</b>

    嵌入式软件中两种超时程序设计方案

    1、背景 在嵌入式软件程序设计过程中中,经常会遇到超时(或定时)的处理情况,基本处理思想是在时间到的时候进行相关程序处理,下面介绍两种超时(或定时)的
    的头像 发表于 10-27 15:15 562次阅读
    <b class='flag-5'>嵌入式</b>软件中两种超时<b class='flag-5'>程序设计</b>方案

    嵌入式linux-聊天程序设计

    电子发烧友网站提供《嵌入式linux-聊天程序设计.doc》资料免费下载
    发表于 10-26 11:42 8次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b>-聊天<b class='flag-5'>程序设计</b>

    Linux系统的嵌入式开发是什么

    嵌入式开发听起来很高大上,但其实它就在我们身边。   嵌入式开发是指将操作系统、应用程序或数据存储在嵌入式设备中,如手机、平板电脑、智能家居等。   随着物联网时代的到来,
    的头像 发表于 10-12 15:40 1522次阅读

    嵌入式Linux的摄像头驱动程序设计与实现

    电子发烧友网站提供《嵌入式Linux的摄像头驱动程序设计与实现.pdf》资料免费下载
    发表于 10-12 09:31 2次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>的摄像头驱动<b class='flag-5'>程序设计</b>与实现

    嵌入式网络语音通信终端设计

    电子发烧友网站提供《嵌入式网络语音通信终端设计.pdf》资料免费下载
    发表于 10-11 15:05 0次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>网络</b>语音通信<b class='flag-5'>终端</b>设计

    什么是嵌入式Linux

    Linux到底是什么呢? 嵌入式linux 是将日益流行的Linux操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种操作系统。简单
    发表于 10-11 13:47

    基于dsp嵌入式uiptcp_ip协议栈的应用研究

    随着信息技术和工业控制系统的不断发展,嵌入式设备对于网络接入的要求越来越高。本文基于数字信号处理器DSP(Digital Signal Processor)利用微型TCPIP协议栈ulP来实现
    发表于 09-25 07:11