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

目录
相关文章
|
存储 关系型数据库 MySQL
深入理解MySQL索引:从原理到最佳实践
深入理解MySQL索引:从原理到最佳实践
1198 0
|
11月前
|
存储 SQL 数据库
深入理解数据库索引:提升查询性能的关键
数据库索引是优化查询性能的重要工具。本文将带你深入探索索引的内部结构和工作原理,揭示如何通过合理使用索引来加速数据库查询,同时避免常见的索引陷阱。
|
机器学习/深度学习 算法 数据库
深入浅出:利用Python与机器学习优化数据库性能
本文介绍了一种创新的方法,结合Python编程语言和机器学习技术,来优化数据库性能。传统的数据库性能优化方法往往依赖于数据库管理员(DBA)的经验和直觉,而本文所提出的方法通过自动化的方式,利用机器学习模型对数据库查询进行分析和优化,从而实现更高效、更智能的数据库性能管理。本文首先介绍了使用Python进行数据库操作的基础知识,然后详细阐述了如何应用机器学习算法来预测和改善数据库查询性能,最后通过一个实际案例展示了该方法的有效性。本文旨在为数据库管理员、开发者以及对数据库性能优化感兴趣的读者提供一种全新的视角和工具。
|
关系型数据库 MySQL 数据库
MySQL 和 PostgreSQL,我到底选择哪个?
MySQL 和 PostgreSQL,我到底选择哪个?
14716 0
|
存储 SQL 算法
MySQL索引从基础到原理,看这一篇就够了
MySQL索引从基础到原理,看这一篇就够了
14109 4
MySQL索引从基础到原理,看这一篇就够了
|
3天前
|
SpringCloudAlibaba 负载均衡 Dubbo
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
本文对比分析了SpringCloudAlibaba框架下Feign与Dubbo的服务调用性能及差异。Feign基于HTTP协议,使用简单,适合轻量级微服务架构;Dubbo采用RPC通信,性能更优,支持丰富的服务治理功能。通过实际测试,Dubbo在调用性能、负载均衡和服务发现方面表现更出色。两者各有适用场景,可根据项目需求灵活选择。
347 123
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
|
2天前
|
Java 数据库 数据安全/隐私保护
Spring 微服务和多租户:处理多个客户端
本文介绍了如何在 Spring Boot 微服务架构中实现多租户。多租户允许单个应用实例为多个客户提供独立服务,尤其适用于 SaaS 应用。文章探讨了多租户的类型、优势与挑战,并详细说明了如何通过 Spring Boot 的灵活配置实现租户隔离、动态租户管理及数据源路由,同时确保数据安全与系统可扩展性。结合微服务的优势,开发者可以构建高效、可维护的多租户系统。
180 127
|
5天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
481 106