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

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

3天内不再提示

英创信息技术ARM Linux环境下多连接TCP服务器的编程概述

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

EM9160的主要功能之一就是作为网络平台,工控领域中比较常见的网络应用是利用TCP/IP协议进行数据通讯。在网络应用中,通常都实现多连接的应用需求,本文主要介绍EM9160作为TCP服务器方式的应用——支持多连接的TCP服务器示例程序:Step3_TCPServer。

TCP Socket编程

在进行网络应用程序开发方面大多是采用套接字Socket技术,嵌入式Linux的系统平台上也是如此。Socket编程的基本函数有

socket( )、bind( )、listen( )、accept( )、send( )、sendto( )、recv( )、recvfrom( )、connect( )等。

支持多连接的TCP服务器应用示例

Step3_TCPServe是一个支持多个客户端的连接TCPServer示例,该例程采用了面向对象的C++编程,创建了CTCPServer和CTCPCustom两个类,其中CTCPServer类负责侦听客户端的连接,一旦有客户端请求连接,它就负责接受此连接,并创建一个新的CTCPCustom类对象与客户端进行通讯,然后CTCPServer类接着监听客户端的连接请求,其流程如下:

CTCPServer类

CTCPServer类定义在TCPServer.h文件下,该类提供了3个公共函数,以及一个Socket侦听线程,公共的函数中Open( )、Close( )用于启动或是关闭TCP服务。

class CTCPServer

{

private:

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

//Socket侦听线程

static int SocketListenThread( void*lparam );

public:

int m_sockfd; //TCP服务监听socket

int m_ExitThreadFlag;

int m_LocalPort; //设置服务端口

CTCPServer();

virtual ~CTCPServer();

int Open(); // 打开TCP服务

int Close(); // 关闭TCP服务

// 删除一个客户端对象连接 释放资源

int RemoveClientSocketObject( void* lparam );

};

在Open( )函数中实现了打开套接字,将套接字设置为侦听套接字,并创建侦听客户端连接线程。在Linux应用程序中创建线程的方法在《嵌入式Linux串口通讯的C++设计》中有相关的说明,在该例程中也是采取的同样方式。

SocketListenThread函数中调用select( )侦听客户端的TCP连接,流程如下:

同样的需要注意的是,select( )函数中的时间参数在Linux下每次都需要重新赋值,否则会自动归0。CTCPServer类的实现代码请参见TCPServer.CPP文件。

CTCPCustom类

CTCPCustom的定义在TCPCustom.h文件下。

class CTCPCustom

{

public:

CTCPCustom();

virtual ~CTCPCustom();

public:

char m_RemoteHost[100]; //远程主机IP地址

int m_RemotePort; //远程主机端口号

int m_socketfd; //通讯socket

int m_SocketEnable;

int m_ExitThreadFlag;

CTCPServer* m_pTCPServer;

private:

// 通讯线程函数

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

static void* SocketDataThread(void* lparam); //TCP连接数据通讯线程

public:

int RecvLen;

char RecvBuf[1500];

// 打开socket,创建通讯线程

int Open(void* lparam);

// 关闭socket,关闭线程,释放Socket资源

int Close();

// 向客户端发送数据

int SendData(const char * buf , int len );

};

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

CTCPServer类的调用

CTCPSerer类的具体使用也比较简单,主要是调用对于类中定义Open函数来启动各个TCP通讯线程,反而在主循环中需要实现的功能代码不多了,在本例程中仅仅为每隔1s输出提示信息。以下为Step3_TCPServer.cpp中的相关代码。

class CTCPServer m_TCPServer;

int main()

{

int i1;

printf( ‘Step3_TCPTest V1.0\n’ );

// 给TCP服务器端口赋值

m_TCPServer.m_LocalPort = 1001;

// 创建Socket,启动TCP服务器侦听线程

i1 = m_TCPServer.Open( );

if( i1《0 )

{

printf( ‘TCP Server start fail\n’);

return -1;

}

// 进入主循环,主要是负责管理工作

for( i1=0; i1《10000;i1++) //实际应用时,可设置为无限循环

{

sleep(1);

printf( ‘%d \n’, i1+1);

}

m_TCPServer.Close( );

return 0;

}

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

    关注

    87

    文章

    11292

    浏览量

    209335
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6085

    浏览量

    35296
收藏 人收藏

    评论

    相关推荐

    支持Linux高级客户自行移植内核

    上市)  该项服务具体说明和实施流程参见:支持客户进行Linux移植  需要该服务的客户需与签订技术
    发表于 01-18 13:52

    Eclipse支持在线调试Linux应用程序

    调试linux应用程序》进行下载,也可以直接联系我们。成都信息技术有限公司http://www.emtronix.com
    发表于 03-24 16:28

    串口WiFi方案使用说明

    上的编程方法》,《串口WiFi在WinCE工控主板上的编程方法》。成都信息技术有限公司http://www.emtronix.com
    发表于 04-05 15:52

    采用嵌入式处理PXA270与ARM-Linux相结合的Web服务器构建

    对Intenet技术的发展有重要意义。本文提出一种基于ARM-Linux操作系统的嵌入式Web服务器的设计方法,并给出相应的软硬件设计,并利用Socket编程和CGI程序完成整个Web
    发表于 04-11 07:00

    如何使用tcp连接自己搭建的服务器

    大家好,我想使用tcp连接自己搭建的服务器 这个服务器不是本地local的IP4而是有域名的,类似espslr.*****.com,端口是8591 我使用examples\protoc
    发表于 03-07 06:58

    信息技术ARM9工控主板WinCE应用程序远程控制应用

    公司推出的ARM9嵌入式工控主板产品系列,均预装了正版的WinCE5.0操作系统。微软的WINCE实时多任务操作系统是嵌入式领域的主流操作系统之一,它包括了以TCP/IP为特色的完
    的头像 发表于 11-04 09:28 1749次阅读

    信息技术ARM9主板上运行案例解析

    今年(2009年)的市场活动中,为了让客户更好地完成产品应用开发,向第一次购买
    的头像 发表于 11-12 10:20 1420次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b><b class='flag-5'>ARM</b>9主板上运行案例解析

    信息技术工控主板网络变压连接方法

    在上一篇介绍主板网络变压连接方法的文章中(《工控主板网络变压
    的头像 发表于 01-14 14:09 3650次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b>工控主板网络变压<b class='flag-5'>器</b><b class='flag-5'>连接</b>方法

    信息技术Qt开发环境的搭建介绍

    Linux系统中搭建Qt应用程序的开发环境。这里采用的Linux系统为Ubuntu12.04,交叉工具链为arm-none-linux-gnueabi(版本号为4.4.1),Qt的
    的头像 发表于 01-17 09:12 1565次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b>Qt开发<b class='flag-5'>环境</b>的搭建介绍

    信息技术Linux工控主板支持3G网卡介绍

    (3rd-generation,第三代移动通讯技术)运用的普及,公司的工控主板同样对3G无线通讯做了完备的支持。本文就以目前很常用的华为3G网卡770W和E261为例,介绍
    的头像 发表于 01-17 09:49 2210次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b><b class='flag-5'>Linux</b>工控主板支持3G网卡介绍

    信息技术高性能FTP服务器Linux工控主板上的移植

    ftp是TCP/IP网络上两台设备传送文件的协议,用户在嵌入式Linux系统的开发中,有时候需要搭建一个ftp服务器,以便实现对设备的访问和文件传输等功能。
    的头像 发表于 01-17 10:12 1937次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b>高性能FTP<b class='flag-5'>服务器</b><b class='flag-5'>Linux</b>工控主板上的移植

    信息技术WindowsSTM32单片机eclipse编译环境搭建简介

    公司开发的ETA321多功能扩展模块,是基于STM32F103RC单片机设计的面向实时控制处理单元模块。 ETA321模块作为客户端,使用USB与公司的
    的头像 发表于 02-06 11:08 1532次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b>Windows<b class='flag-5'>下</b>STM32单片机eclipse编译<b class='flag-5'>环境</b>搭建简介

    Linux下网络编程TCP并发服务器TCP客户端程序免费下载

    本文档的主要内容详细介绍的是Linux下网络编程TCP并发服务器TCP客户端程序免费下载
    发表于 01-08 15:12 9次下载
    <b class='flag-5'>Linux</b>下网络<b class='flag-5'>编程</b><b class='flag-5'>TCP</b>并发<b class='flag-5'>服务器</b>和<b class='flag-5'>TCP</b>客户端程序免费下载

    LinuxTCP网络编程-创建服务器与客户端

    这篇文章介绍在Linux的socket编程,完成TCP服务器、客户端的创建,实现数据通信。
    的头像 发表于 08-14 09:26 2483次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>下</b><b class='flag-5'>TCP</b>网络<b class='flag-5'>编程</b>-创建<b class='flag-5'>服务器</b>与客户端

    单台服务器支持的TCP并发连接

    总之,65535只是Linux系统中可使用端口port数量的上限,端口port数量与TCP连接数量并非完全一一对应的关系,服务器支持的TCP
    的头像 发表于 11-06 19:36 1604次阅读