BREW应用向其他平台的移植

简介: 版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。 https://blog.csdn.net/wireless_com/article/details/6520478 把一个BREW上功能移植到Symbian平台为例,看一下具体的实现方式。
版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。 https://blog.csdn.net/wireless_com/article/details/6520478

把一个BREW上功能移植到Symbian平台为例,看一下具体的实现方式。由于网络应用的重要地位,这里先使用BREW3.x中ISockPort建立一个TCP的连接。首先,初始化服务器的地址:

pME->m_saSockAddr.wFamily = AEE_AF_INET;

pME->m_saSockAddr.inet.port = HTONS(SERVER_PORT);

INET_PTON(pMe->saSockAddr.wFamily, SERVER_ADDR, &(pMe->saSockAddr.inet.addr));

然后创建并打开ISockPort,

ret = ISHELL_CreateInstance(pME->m_pIShell, AEECLSID_SOCKPORT, (void**)&(pME->m_pISockPort));

ret = ISOCKPORT_OpenEx(pME->m_pISockPort, AEE_AF_INET, AEE_SOCKPORT_STREAM, 0);

接下来建立TCP连接,

ret = ISOCKPORT_Connect(pME->m_pISockPort, &pME->m_saSockAddr);

if (AEEPORT_WAIT == ret){

ISOCKPORT_WriteableEx(pME->m_pISockPort,&pME->m_cbWriteCallback, MyApp_TryConnect, pME);

return;

}

建立连接成功后,就可以从服务器读写数据了

ret=ISOCKPORT_Write(pME->m_pISockPort,pME->m_caWriteBuffer + pME->m_nBytesWritten, BUFFER_SIZE - pME->m_nBytesWritten);

// retry later

if (AEEPORT_WAIT == ret){

ISOCKPORT_WriteableEx(pME->m_pISockPort, &pME->m_cbWriteCallback, CApp_TryWrite, pME);

return;

}

最后,取消回调并释放ISockPort接口。

CALLBACK_Cancel(&pME->m_cbReadCallback);

CALLBACK_Cancel(&pME->m_cbWriteCallback);

IBASE_Release((IBase*)(pME->m_pISockPort));

 

Symbian 是使用C++的,移植以上功能的时候,需要使用Symbian OS 中客户端服务器框架。首先从 CActive 创建自己的对象:

#include <e32base.h>

#include <in_sock.h>

#include <es_sock.h>

class CTCPConnector : public CActive

{

private:

// these are some of the classes relevant to opening a TCP connection:

TInt iState;

RSocket iSocket;

RSocketServ iSocketServer;

RHostResolver iResolver;

TInetAddr iAddress;

}

然后定义服务方法

void CTCPConnector::MakeOutgoingConnectionL(const TDesC& aHost, TInt aPort){

...

iState = EGetByName;

iResolver.GetByName( /* parameters required for resolving a host */);

...

}

接下来实现建立连接的方法

void CSEIConnector::ConnectSocketL(void){

...

iSocketServer.Connect();

...

iSocket.Open(iSocketServer, KAfInet, KSockStream, KProtocolInetTcp);

...

iSocket.Connect(/*parameters required connecting */);

...

iSocket.Connect(iAddress, iStatus);

iState = ESocketConnect;

...

}

最后实现RunL() 来处理事件通知:

void CTCPConnector::RunL(){

TInt error = KErrNone;

switch(iState)

{

case EGetByName:

{

ConnectSocketL();

break;

}

case ESocketConnect:

{

ProcessRequestL();

break;

}

}

}

在Symbian中的工作流程是这样的,客户端调用MakeOutgoingConnectionL(), MakeOutgoingConnectionL()首先发起 DNS 查询,如果域名被成功解析,则开始调用CTCPConnector::RunL()。在CTCPConnector::RunL()中,先要检查请求的状态,如果当前状态值是EGetByName就可以调用ConnectSocketL()了。在ConnectSocketL()中,要创建客户端和服务器的类以及相应的RSocket 和 RSocketServer。最后,调用RSocket::Connect() 来创建正在的TCP连接,无论连接成功或者失败,都将再一次运行RunL(),具体的数据读写过程以此类推。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wireless_com/archive/2010/11/02/5981443.aspx

目录
相关文章
|
Linux 编译器 开发工具
【Linux环境基础开发工具】软件包管理器-yum
【Linux环境基础开发工具】软件包管理器-yum
171 0
|
Ubuntu 编译器 芯片
FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台
FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台
FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台
|
4月前
|
数据安全/隐私保护
嵌入式编程工具MDK5.14安装包及安装教程
该文档提供了嵌入式编程工具MDK5.14的安装包及安装教程,包括了Pack包的安装步骤。
79 3
|
4月前
|
Linux
Avalonia应用在基于Linux的国产操作deepin上运行
Avalonia应用在基于Linux的国产操作deepin上运行
67 0
|
7月前
|
Linux C语言 开发者
Linux嵌入式系统之交叉编译中构建交叉编译工具链
Linux嵌入式系统之交叉编译中构建交叉编译工具链
114 0
|
Linux 编译器 开发工具
Linux基础开发工具之软件包管理器
Linux作为一款操作系统,其自然也和我们其他的操作系统一样需要安装对应得软件去满足我们的需求,因此为了更好的下载软件我们也就需要使用相应的软件包管理器。
156 0
|
敏捷开发 Ubuntu Unix
一网成擒全端涵盖,在不同架构(Intel x86/Apple m1 silicon)不同开发平台(Win10/Win11/Mac/Ubuntu)上安装配置Python3.10开发环境
时光荏苒,过隙白驹,进入2023年,著名敏捷开发语言Python也放出了3.10最终版,本次我们来展示一下在不同的系统和平台中,高效部署Python3.10开发环境,这里我们并不依赖其他的三方软件,只通过Python官方的安装包进行配置,编辑器我们依然使用微软开源的Vscode,争取在一分钟以内就可以在一台干净的开发机上部署好环境,省去一些不必要的步骤。
一网成擒全端涵盖,在不同架构(Intel x86/Apple m1 silicon)不同开发平台(Win10/Win11/Mac/Ubuntu)上安装配置Python3.10开发环境
|
存储 iOS开发 MacOS
开源 Python 发行版 Anaconda 适配苹果 M1 Mac
开源 Python 发行版 Anaconda 适配苹果 M1 Mac
426 0
开源 Python 发行版 Anaconda 适配苹果 M1 Mac
|
Linux
Linux交叉编译——树莓派工具链安装
Linux交叉编译——树莓派工具链安装
365 0
|
物联网 AliOS-Things Linux
Linux 下搭建 AliOS-Things 开发环境
aos-cube是AliOS Things基于命令行的开发管理工具,主要功能包括:工程配置与编译、Image下载调试、组件脚手架生成、组件安装管理、设备管理、代码审查、OTA工具等功能。本文将为大家介绍如何在Linux 下搭建 AliOS-Things 开发环境。
2343 0
Linux 下搭建 AliOS-Things 开发环境