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

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

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

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

英創(chuàng)信息技術(shù)基于嵌入式Linux的網(wǎng)絡(luò)終端應(yīng)用程序設(shè)計(jì)介紹

英創(chuàng)信息技術(shù) ? 來(lái)源:英創(chuàng)信息技術(shù) ? 作者:英創(chuàng)信息技術(shù) ? 2019-11-18 09:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

EM9160具有豐富的通訊接口,可以支持基于以太網(wǎng)和PPP(如GPRS/CDMA)的網(wǎng)絡(luò)應(yīng)用。本文主要介紹EM9160作為TCP客戶端方式的應(yīng)用示例:Step4_TCPClient。

TCP客戶端Socket編程流程

在利用Socket進(jìn)行TCP客戶端編程時(shí),建立TCP連接的過(guò)程一般比較簡(jiǎn)單,首先客戶端調(diào)用socket()函數(shù)建立流式套接字,然后調(diào)用connect()函數(shù)請(qǐng)求服務(wù)器端建立TCP連接,成功建立連接后即可與服務(wù)器端進(jìn)行TCP/IP數(shù)據(jù)通訊,流程如下:

TCPClient應(yīng)用示例

Step4_TCPClient是一個(gè)具有自動(dòng)管理功能的TCP客戶端應(yīng)用示例。作為TCP客戶端主動(dòng)和服務(wù)器端建立TCP連接的過(guò)程編程相對(duì)簡(jiǎn)單,直接調(diào)用相關(guān)的Socket函數(shù)即可,建立TCP連接的功能封裝在CTCPClient類中。嵌入式的應(yīng)用場(chǎng)合大多是處于長(zhǎng)期運(yùn)行無(wú)人值守的狀態(tài),可能會(huì)遇到需要一直保持TCP客戶端連接的情況,Step4_TCPClient例程基于這種需求,專門封裝了一個(gè)CTCPClientManager管理類對(duì)TCPClient的連接進(jìn)行自動(dòng)管理,包括啟動(dòng)建立TCP的客戶端連接、查詢TCP連接的狀態(tài)、添加多個(gè)TCP客戶端連接等功能。

CTCPClient類

CTCPClient類定義在TCPClient.H文件下,該類提供了4個(gè)公共函數(shù),以及一個(gè)數(shù)據(jù)通訊線程,調(diào)用該類中的相關(guān)函數(shù)與TCP服務(wù)器端建立連接。

class CTCPClient

{

private:

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

//數(shù)據(jù)通訊處理線程函數(shù)

static int SocketThreadFunc( void*lparam );

public:

// TCP通訊Socket

int m_sockfd;

int m_sockclose;

int m_ExitThreadFlag;

//遠(yuǎn)程主機(jī)IP地址

char m_remoteHost[255];

//遠(yuǎn)程主機(jī)端口

int m_port;

char RecvBuf[1500];

int m_nRecvLen;

public:

CTCPClient();

virtual ~CTCPClient( );

//打開(kāi)創(chuàng)建客戶端socket

int Open( char* ServerIP, int ServerPort );

//關(guān)閉客戶端socket

int Close( );

//與服務(wù)器端建立連接 并創(chuàng)建數(shù)據(jù)通訊處理線程

int Connect();

//向服務(wù)器端發(fā)送數(shù)據(jù)

int SendData( char * buf , int len);

};

Open函數(shù)執(zhí)行創(chuàng)建打開(kāi)socket操作,并設(shè)置遠(yuǎn)端TCP服務(wù)器的IP和端口。

Connect函數(shù)調(diào)用connect( )與遠(yuǎn)端TCP服務(wù)器建立連接,調(diào)用select( )等待TCP連接的建立,TCP連接建立成功,則創(chuàng)建TCP數(shù)據(jù)通訊處理線程。

SocketThreadFunc函數(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ā),用戶可結(jié)合實(shí)際的應(yīng)用修改此處代碼。流程如下:

CTCPClientManager類

TCP客戶端連接定義為四個(gè)狀態(tài):

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

CTCPClientManager所封裝的功能函數(shù)就是根據(jù)連接的各個(gè)狀態(tài)對(duì)TCP客戶端連接進(jìn)行管理,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客戶端連接對(duì)象,輸入?yún)?shù)為TCP服務(wù)器的IP和端口

int AddTCPClientObject( char* pHostIP, int nHostPort );

//刪除所有TCP客戶端連接對(duì)象

int DeleteAllTCPClient( );

//設(shè)置TCP客戶端連接對(duì)象為csINIT狀態(tài)

int Open( int Idx );

//獲取TCP客戶端連接狀態(tài)

int GetTCPClientState( int Idx );

//啟動(dòng)TCPClient連接管理操作,并創(chuàng)建TCPClient連接管理線程

int Start( );

//關(guān)閉TCPClient連接管理操作

int Stop( );

};

TCPClientThreadFunc函數(shù)是實(shí)現(xiàn)對(duì)TCP連接狀態(tài)管理操作的核心代碼,由于Linux下sleep的最小單位為秒,對(duì)于毫秒級(jí)的延時(shí)等待,在該函數(shù)中利用調(diào)用select( )設(shè)置相關(guān)的時(shí)間參數(shù)來(lái)實(shí)現(xiàn)。流程如下:

CTCPClientManager類的調(diào)用

CTCPClientManager類的具體使用過(guò)程:首先調(diào)用類中定義AddTCPClientObject加載TCP連接對(duì)象,然后調(diào)用類中定義Start函數(shù)來(lái)啟動(dòng)TCP連接自動(dòng)管理線程,Open函數(shù)將TCP連接狀態(tài)設(shè)置為csINIT狀態(tài)。本例程中主循環(huán)的操作為每隔1s查詢TCPClient連接的狀態(tài),如果狀態(tài)為csWait,程序調(diào)用Open函數(shù)將其設(shè)置為csINIT狀態(tài),則TCPC連接管理線程將自動(dòng)進(jìn)行與TCP服務(wù)器端建立連接的操作。

以下為Step4_TCPClient.cpp中的相關(guān)代碼。

class CTCPClientManager TCPClntManager;

int main()

{

int i1, i2, i3;

//添加一個(gè)TCP客戶端連接對(duì)象

TCPClntManager.AddTCPClientObject( ‘192.168.201.121’, 1001 );

//啟動(dòng)TCPClient連接管理操作,并創(chuàng)建TCPClient連接管理線程

TCPClntManager.Start();

for( i1=0; i1 {

//設(shè)置TCP客戶端連接初始狀態(tài),連接管理線程將自動(dòng)進(jìn)行TCP的連接操作

TCPClntManager.Open(i1);

}

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

{

sleep(1);

for( i2=0; i2 {

// 查詢TCP客戶端連接狀態(tài)

i3 = TCPClntManager.GetTCPClientState(i2);

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

if( i3==0 )

{

//設(shè)置TCP客戶端連接初始狀態(tài),連接管理線程將自動(dòng)進(jìn)行TCP連接操作

TCPClntManager.Open( i2 );

}

}

}

return 0;

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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

    文章

    11509

    瀏覽量

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

    關(guān)注

    7

    文章

    6100

    瀏覽量

    36299
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    Linux嵌入式和單片機(jī)嵌入式的區(qū)別?

    :使用Linux操作系統(tǒng),可以運(yùn)行各種復(fù)雜的應(yīng)用程序和驅(qū)動(dòng)程序。 4. 資源需求 : 單片機(jī)嵌入式 :對(duì)硬件資源的需求較低,通常只需要一個(gè)單片機(jī)芯片,內(nèi)存和存儲(chǔ)空間較小。
    發(fā)表于 06-20 09:46

    Linux的作用

    。 2、嵌入式系統(tǒng):Linux可以被嵌入到各種嵌入式設(shè)備中,如智能路由器、智能電視等。它提供了一個(gè)靈活的平臺(tái),可以根據(jù)設(shè)備的需求進(jìn)行定制和優(yōu)化。 3、個(gè)人電腦操作系統(tǒng):
    發(fā)表于 04-04 01:57

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-Linux設(shè)備驅(qū)動(dòng)的分類

    內(nèi)核模塊嵌入Linux內(nèi)核中,位于內(nèi)核空間。它們直接與內(nèi)核進(jìn)行交互,通過(guò)內(nèi)核提供的接口與硬件設(shè)備進(jìn)行通信和控制。用戶空間的應(yīng)用程序通過(guò)系統(tǒng)調(diào)用和設(shè)備文件接口與設(shè)備驅(qū)動(dòng)進(jìn)行交互。設(shè)備驅(qū)動(dòng)負(fù)責(zé)接收來(lái)自用戶空間的請(qǐng)求,并將其轉(zhuǎn)化為相
    發(fā)表于 03-12 10:20

    婦女節(jié)|從程序設(shè)計(jì)的先驅(qū)到嵌入式系統(tǒng)的革新者!

    領(lǐng)域的技術(shù)高管占比仍不足15%,這僅是科技行業(yè)整體高管性別平等水平的一半。盡管如此,女性在這一領(lǐng)域的影響力絲毫未減。從程序設(shè)計(jì)的先驅(qū)到嵌入式系統(tǒng)的革新者,數(shù)不勝數(shù)
    的頭像 發(fā)表于 03-08 09:55 ?373次閱讀
    婦女節(jié)|從<b class='flag-5'>程序設(shè)計(jì)</b>的先驅(qū)到<b class='flag-5'>嵌入式</b>系統(tǒng)的革新者!

    嵌入式工程師都在找的【Linux內(nèi)核調(diào)試技術(shù)】建議收藏!

    嵌入式系統(tǒng)的開(kāi)發(fā)中,Linux內(nèi)核調(diào)試是一個(gè)至關(guān)重要的環(huán)節(jié)。 隨著處理器技術(shù)的不斷進(jìn)步和嵌入式領(lǐng)域的蓬勃發(fā)展,掌握有效的內(nèi)核調(diào)試技術(shù)成為
    發(fā)表于 11-28 15:37

    嵌入式linux開(kāi)發(fā)的基本步驟有哪些?

    嵌入式Linux開(kāi)發(fā)是一個(gè)復(fù)雜的過(guò)程,涉及到硬件選擇、操作系統(tǒng)移植、驅(qū)動(dòng)開(kāi)發(fā)、應(yīng)用程序開(kāi)發(fā)等多個(gè)方面。以下是嵌入式Linux開(kāi)發(fā)的基本步驟,
    的頭像 發(fā)表于 09-02 09:11 ?1233次閱讀

    嵌入式linux開(kāi)發(fā)板怎么操作

    嵌入式Linux開(kāi)發(fā)板是一種基于Linux操作系統(tǒng)的嵌入式系統(tǒng)開(kāi)發(fā)平臺(tái)。它通常包括一個(gè)處理器、內(nèi)存、存儲(chǔ)器、輸入/輸出接口等硬件組件,以及一個(gè)基于L
    的頭像 發(fā)表于 09-02 09:09 ?793次閱讀

    嵌入式linux開(kāi)發(fā)板芯片的工作原理

    嵌入式Linux開(kāi)發(fā)板是一種基于Linux操作系統(tǒng)的嵌入式系統(tǒng)開(kāi)發(fā)平臺(tái),它廣泛應(yīng)用于工業(yè)控制、智能家居、智能交通、醫(yī)療設(shè)備等領(lǐng)域。 嵌入式
    的頭像 發(fā)表于 09-02 09:07 ?815次閱讀

    C28x嵌入式應(yīng)用程序二進(jìn)制接口

    電子發(fā)燒友網(wǎng)站提供《C28x嵌入式應(yīng)用程序二進(jìn)制接口.pdf》資料免費(fèi)下載
    發(fā)表于 08-31 09:39 ?0次下載
    C28x<b class='flag-5'>嵌入式</b><b class='flag-5'>應(yīng)用程序</b>二進(jìn)制接口

    開(kāi)啟全新AI時(shí)代 智能嵌入式系統(tǒng)快速發(fā)展——“第六屆國(guó)產(chǎn)嵌入式操作系統(tǒng)技術(shù)與產(chǎn)業(yè)發(fā)展論壇”圓滿結(jié)束

    。 湖南大學(xué)教授、嵌入式網(wǎng)絡(luò)計(jì)算湖南省重點(diǎn)實(shí)驗(yàn)室主任謝國(guó)琪做了“國(guó)產(chǎn)異構(gòu)計(jì)算平臺(tái)的‘五合一’智能計(jì)算開(kāi)發(fā)創(chuàng)新實(shí)踐”的專題報(bào)告。謝國(guó)琪介紹國(guó)產(chǎn)異構(gòu)計(jì)算平臺(tái)技術(shù)特點(diǎn),以及在國(guó)產(chǎn)異構(gòu)計(jì)算平
    發(fā)表于 08-30 17:24

    MSP430嵌入式應(yīng)用程序二進(jìn)制接口

    電子發(fā)燒友網(wǎng)站提供《MSP430嵌入式應(yīng)用程序二進(jìn)制接口.pdf》資料免費(fèi)下載
    發(fā)表于 08-30 11:43 ?0次下載
    MSP430<b class='flag-5'>嵌入式</b><b class='flag-5'>應(yīng)用程序</b>二進(jìn)制接口

    C6000嵌入式應(yīng)用程序二進(jìn)制接口

    電子發(fā)燒友網(wǎng)站提供《C6000嵌入式應(yīng)用程序二進(jìn)制接口.pdf》資料免費(fèi)下載
    發(fā)表于 08-29 14:52 ?0次下載
    C6000<b class='flag-5'>嵌入式</b><b class='flag-5'>應(yīng)用程序</b>二進(jìn)制接口

    飛凌嵌入式技術(shù)創(chuàng)新日(深圳站)精彩回顧

    工的分享,則更加側(cè)重于嵌入式技術(shù)的研發(fā)和創(chuàng)新,為與會(huì)者提供了新的問(wèn)題解決思路;最后,粵港澳大灣區(qū)國(guó)創(chuàng)中心技術(shù)專家的溫老師 介紹了openEu
    發(fā)表于 08-28 09:06

    學(xué)習(xí)hypervisor嵌入式產(chǎn)品安全設(shè)計(jì)

    第一部分(第1~2章)介紹Hypervisor基礎(chǔ),涵蓋虛擬化技術(shù)與實(shí)現(xiàn)、主流的嵌入式Hypervisor產(chǎn)品,以及基于分離內(nèi)核的嵌入式Hypervisor等內(nèi)容。第二部分(第3~12
    發(fā)表于 08-25 09:11

    嵌入式機(jī)電一體化系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)》讀后感

    的應(yīng)用。曾教授詳細(xì)講解了如何為嵌入式系統(tǒng)構(gòu)建Linux環(huán)境,以及在Linux中進(jìn)行程序設(shè)計(jì)的方法和技巧。通過(guò)這些內(nèi)容,我不僅掌握了Linux
    發(fā)表于 08-21 08:45