一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

英創(chuàng)信息技術(shù)ARM Linux環(huán)境下多連接TCP服務(wù)器的編程概述

英創(chuàng)信息技術(shù) ? 來(lái)源:英創(chuàng)信息技術(shù) ? 作者:英創(chuàng)信息技術(shù) ? 2019-11-18 09:42 ? 次閱讀

EM9160的主要功能之一就是作為網(wǎng)絡(luò)平臺(tái),工控領(lǐng)域中比較常見(jiàn)的網(wǎng)絡(luò)應(yīng)用是利用TCP/IP協(xié)議進(jìn)行數(shù)據(jù)通訊。在網(wǎng)絡(luò)應(yīng)用中,通常都實(shí)現(xiàn)多連接的應(yīng)用需求,本文主要介紹EM9160作為T(mén)CP服務(wù)器方式的應(yīng)用——支持多連接的TCP服務(wù)器示例程序:Step3_TCPServer。

TCP Socket編程

在進(jìn)行網(wǎng)絡(luò)應(yīng)用程序開(kāi)發(fā)方面大多是采用套接字Socket技術(shù),嵌入式Linux的系統(tǒng)平臺(tái)上也是如此。Socket編程的基本函數(shù)有

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

支持多連接的TCP服務(wù)器應(yīng)用示例

Step3_TCPServe是一個(gè)支持多個(gè)客戶(hù)端的連接TCPServer示例,該例程采用了面向?qū)ο蟮?a href="http://www.www27dydycom.cn/tags/C++/" target="_blank">C++編程,創(chuàng)建了CTCPServer和CTCPCustom兩個(gè)類(lèi),其中CTCPServer類(lèi)負(fù)責(zé)偵聽(tīng)客戶(hù)端的連接,一旦有客戶(hù)端請(qǐng)求連接,它就負(fù)責(zé)接受此連接,并創(chuàng)建一個(gè)新的CTCPCustom類(lèi)對(duì)象與客戶(hù)端進(jìn)行通訊,然后CTCPServer類(lèi)接著監(jiān)聽(tīng)客戶(hù)端的連接請(qǐng)求,其流程如下:

CTCPServer類(lèi)

CTCPServer類(lèi)定義在TCPServer.h文件下,該類(lèi)提供了3個(gè)公共函數(shù),以及一個(gè)Socket偵聽(tīng)線程,公共的函數(shù)中Open( )、Close( )用于啟動(dòng)或是關(guān)閉TCP服務(wù)。

class CTCPServer

{

private:

pthread_t m_thread; //通訊線程標(biāo)識(shí)符ID

//Socket偵聽(tīng)線程

static int SocketListenThread( void*lparam );

public:

int m_sockfd; //TCP服務(wù)監(jiān)聽(tīng)socket

int m_ExitThreadFlag;

int m_LocalPort; //設(shè)置服務(wù)端口號(hào)

CTCPServer();

virtual ~CTCPServer();

int Open(); // 打開(kāi)TCP服務(wù)

int Close(); // 關(guān)閉TCP服務(wù)

// 刪除一個(gè)客戶(hù)端對(duì)象連接 釋放資源

int RemoveClientSocketObject( void* lparam );

};

在Open( )函數(shù)中實(shí)現(xiàn)了打開(kāi)套接字,將套接字設(shè)置為偵聽(tīng)套接字,并創(chuàng)建偵聽(tīng)客戶(hù)端連接線程。在Linux應(yīng)用程序中創(chuàng)建線程的方法在《嵌入式Linux串口通訊的C++設(shè)計(jì)》中有相關(guān)的說(shuō)明,在該例程中也是采取的同樣方式。

SocketListenThread函數(shù)中調(diào)用select( )偵聽(tīng)客戶(hù)端的TCP連接,流程如下:

同樣的需要注意的是,select( )函數(shù)中的時(shí)間參數(shù)在Linux下每次都需要重新賦值,否則會(huì)自動(dòng)歸0。CTCPServer類(lèi)的實(shí)現(xiàn)代碼請(qǐng)參見(jiàn)TCPServer.CPP文件。

CTCPCustom類(lèi)

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

class CTCPCustom

{

public:

CTCPCustom();

virtual ~CTCPCustom();

public:

char m_RemoteHost[100]; //遠(yuǎn)程主機(jī)IP地址

int m_RemotePort; //遠(yuǎn)程主機(jī)端口號(hào)

int m_socketfd; //通訊socket

int m_SocketEnable;

int m_ExitThreadFlag;

CTCPServer* m_pTCPServer;

private:

// 通訊線程函數(shù)

pthread_t m_thread; //通訊線程標(biāo)識(shí)符ID

static void* SocketDataThread(void* lparam); //TCP連接數(shù)據(jù)通訊線程

public:

int RecvLen;

char RecvBuf[1500];

// 打開(kāi)socket,創(chuàng)建通訊線程

int Open(void* lparam);

// 關(guān)閉socket,關(guān)閉線程,釋放Socket資源

int Close();

// 向客戶(hù)端發(fā)送數(shù)據(jù)

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

};

其中的SocketDataThread函數(shù)是實(shí)現(xiàn)TCP連接數(shù)據(jù)通訊的核心代碼,在該函數(shù)中調(diào)用select( )等待TCP連接的通訊數(shù)據(jù),對(duì)于接收的TCP連接數(shù)據(jù)的處理也是在該函數(shù)中實(shí)現(xiàn),在本例程中處理為簡(jiǎn)單的數(shù)據(jù)回發(fā),用戶(hù)可結(jié)合實(shí)際的應(yīng)用修改此處代碼,流程如下:

CTCPServer類(lèi)的調(diào)用

CTCPSerer類(lèi)的具體使用也比較簡(jiǎn)單,主要是調(diào)用對(duì)于類(lèi)中定義Open函數(shù)來(lái)啟動(dòng)各個(gè)TCP通訊線程,反而在主循環(huán)中需要實(shí)現(xiàn)的功能代碼不多了,在本例程中僅僅為每隔1s輸出提示信息。以下為Step3_TCPServer.cpp中的相關(guān)代碼。

class CTCPServer m_TCPServer;

int main()

{

int i1;

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

// 給TCP服務(wù)器端口賦值

m_TCPServer.m_LocalPort = 1001;

// 創(chuàng)建Socket,啟動(dòng)TCP服務(wù)器偵聽(tīng)線程

i1 = m_TCPServer.Open( );

if( i1《0 )

{

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

return -1;

}

// 進(jìn)入主循環(huán),主要是負(fù)責(zé)管理工作

for( i1=0; i1《10000;i1++) //實(shí)際應(yīng)用時(shí),可設(shè)置為無(wú)限循環(huán)

{

sleep(1);

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

}

m_TCPServer.Close( );

return 0;

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11425

    瀏覽量

    212398
  • 嵌入式主板
    +關(guān)注

    關(guān)注

    7

    文章

    6095

    瀏覽量

    36089
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    創(chuàng)支持Linux高級(jí)客戶(hù)自行移植內(nèi)核

    上市)  該項(xiàng)服務(wù)具體說(shuō)明和實(shí)施流程參見(jiàn):支持客戶(hù)進(jìn)行Linux移植  需要該服務(wù)的客戶(hù)需與創(chuàng)簽訂技術(shù)
    發(fā)表于 01-18 13:52

    創(chuàng)Eclipse支持在線調(diào)試Linux應(yīng)用程序

    調(diào)試linux應(yīng)用程序》進(jìn)行下載,也可以直接聯(lián)系我們。成都創(chuàng)信息技術(shù)有限公司http://www.emtronix.com
    發(fā)表于 03-24 16:28

    創(chuàng)串口WiFi方案使用說(shuō)明

    上的編程方法》,《串口WiFi在WinCE工控主板上的編程方法》。成都創(chuàng)信息技術(shù)有限公司http://www.emtronix.com
    發(fā)表于 04-05 15:52

    采用嵌入式處理PXA270與ARM-Linux相結(jié)合的Web服務(wù)器構(gòu)建

    對(duì)Intenet技術(shù)的發(fā)展有重要意義。本文提出一種基于ARM-Linux操作系統(tǒng)的嵌入式Web服務(wù)器的設(shè)計(jì)方法,并給出相應(yīng)的軟硬件設(shè)計(jì),并利用Socket編程和CGI程序完成整個(gè)Web
    發(fā)表于 04-11 07:00

    如何使用tcp連接自己搭建的服務(wù)器?

    大家好,我想使用tcp連接自己搭建的服務(wù)器 這個(gè)服務(wù)器不是本地local的IP4而是有域名的,類(lèi)似espslr.*****.com,端口是8591 我使用examples\protoc
    發(fā)表于 03-07 06:58

    創(chuàng)信息技術(shù)ARM9工控主板WinCE應(yīng)用程序遠(yuǎn)程控制應(yīng)用

    創(chuàng)公司推出的ARM9嵌入式工控主板產(chǎn)品系列,均預(yù)裝了正版的WinCE5.0操作系統(tǒng)。微軟的WINCE實(shí)時(shí)多任務(wù)操作系統(tǒng)是嵌入式領(lǐng)域的主流操作系統(tǒng)之一,它包括了以TCP/IP為特色的完
    的頭像 發(fā)表于 11-04 09:28 ?1909次閱讀

    創(chuàng)信息技術(shù)ARM9主板上運(yùn)行案例解析

    創(chuàng)今年(2009年)的市場(chǎng)活動(dòng)中,為了讓客戶(hù)更好地完成產(chǎn)品應(yīng)用開(kāi)發(fā),創(chuàng)向第一次購(gòu)買(mǎi)創(chuàng)
    的頭像 發(fā)表于 11-12 10:20 ?1656次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>信息技術(shù)</b><b class='flag-5'>ARM</b>9主板上運(yùn)行案例解析

    創(chuàng)信息技術(shù)工控主板網(wǎng)絡(luò)變壓連接方法

    在上一篇介紹創(chuàng)主板網(wǎng)絡(luò)變壓連接方法的文章中(《創(chuàng)工控主板網(wǎng)絡(luò)變壓
    的頭像 發(fā)表于 01-14 14:09 ?3899次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>信息技術(shù)</b>工控主板網(wǎng)絡(luò)變壓<b class='flag-5'>器</b><b class='flag-5'>連接</b>方法

    創(chuàng)信息技術(shù)Qt開(kāi)發(fā)環(huán)境的搭建介紹

    Linux系統(tǒng)中搭建Qt應(yīng)用程序的開(kāi)發(fā)環(huán)境。這里采用的Linux系統(tǒng)為Ubuntu12.04,交叉工具鏈為arm-none-linux-gnueabi(版本號(hào)為4.4.1),Qt的
    的頭像 發(fā)表于 01-17 09:12 ?1762次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>信息技術(shù)</b>Qt開(kāi)發(fā)<b class='flag-5'>環(huán)境</b>的搭建介紹

    創(chuàng)信息技術(shù)Linux工控主板支持3G網(wǎng)卡介紹

    (3rd-generation,第三代移動(dòng)通訊技術(shù))運(yùn)用的普及,創(chuàng)公司的工控主板同樣對(duì)3G無(wú)線通訊做了完備的支持。本文就以目前很常用的華為3G網(wǎng)卡770W和E261為例,介紹
    的頭像 發(fā)表于 01-17 09:49 ?2388次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>信息技術(shù)</b><b class='flag-5'>Linux</b>工控主板支持3G網(wǎng)卡介紹

    創(chuàng)信息技術(shù)高性能FTP服務(wù)器Linux工控主板上的移植

    ftp是TCP/IP網(wǎng)絡(luò)上兩臺(tái)設(shè)備傳送文件的協(xié)議,用戶(hù)在嵌入式Linux系統(tǒng)的開(kāi)發(fā)中,有時(shí)候需要搭建一個(gè)ftp服務(wù)器,以便實(shí)現(xiàn)對(duì)設(shè)備的訪問(wèn)和文件傳輸?shù)裙δ堋?b class='flag-5'>英
    的頭像 發(fā)表于 01-17 10:12 ?2061次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>信息技術(shù)</b>高性能FTP<b class='flag-5'>服務(wù)器</b><b class='flag-5'>Linux</b>工控主板上的移植

    創(chuàng)信息技術(shù)WindowsSTM32單片機(jī)eclipse編譯環(huán)境搭建簡(jiǎn)介

    創(chuàng)公司開(kāi)發(fā)的ETA321多功能擴(kuò)展模塊,是基于STM32F103RC單片機(jī)設(shè)計(jì)的面向?qū)崟r(shí)控制處理單元模塊。 ETA321模塊作為客戶(hù)端,使用USB與創(chuàng)公司的
    的頭像 發(fā)表于 02-06 11:08 ?1687次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>信息技術(shù)</b>Windows<b class='flag-5'>下</b>STM32單片機(jī)eclipse編譯<b class='flag-5'>環(huán)境</b>搭建簡(jiǎn)介

    Linux下網(wǎng)絡(luò)編程TCP并發(fā)服務(wù)器TCP客戶(hù)端程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是Linux下網(wǎng)絡(luò)編程TCP并發(fā)服務(wù)器TCP客戶(hù)端程序免費(fèi)下載
    發(fā)表于 01-08 15:12 ?9次下載
    <b class='flag-5'>Linux</b>下網(wǎng)絡(luò)<b class='flag-5'>編程</b><b class='flag-5'>TCP</b>并發(fā)<b class='flag-5'>服務(wù)器</b>和<b class='flag-5'>TCP</b>客戶(hù)端程序免費(fèi)下載

    LinuxTCP網(wǎng)絡(luò)編程-創(chuàng)建服務(wù)器與客戶(hù)端

    這篇文章介紹在Linux的socket編程,完成TCP服務(wù)器、客戶(hù)端的創(chuàng)建,實(shí)現(xiàn)數(shù)據(jù)通信。
    的頭像 發(fā)表于 08-14 09:26 ?2698次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>下</b><b class='flag-5'>TCP</b>網(wǎng)絡(luò)<b class='flag-5'>編程</b>-創(chuàng)建<b class='flag-5'>服務(wù)器</b>與客戶(hù)端

    單臺(tái)服務(wù)器支持的TCP并發(fā)連接數(shù)

    總之,65535只是Linux系統(tǒng)中可使用端口port數(shù)量的上限,端口port數(shù)量與TCP連接數(shù)量并非完全一一對(duì)應(yīng)的關(guān)系,服務(wù)器支持的TCP
    的頭像 發(fā)表于 11-06 19:36 ?1874次閱讀