鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 手机系统开发 > Symbian > >

[Symbian项目进展]对IP地址的存取技巧

来源:互联网 作者:佚名 时间:2015-09-25 05:48
对IP 地址 的 存取 技巧 因为 项目 中用到了IP 地址 ,所以对IP 地址 的 存取 是本 项目 必须面对的技术点。 Symbian中IP 地址 类型为TInetAddr,它继承自TBuf8KMaxSockAddrSize,是普通的socket server 地址 类TSockAddr的特殊类。 TInetAddr的赋值采取下面

对IP地址存取技巧

因为项目中用到了IP地址,所以对IP地址存取是本项目必须面对的技术点。

Symbian中IP地址类型为TInetAddr,它继承自TBuf8<KMaxSockAddrSize>,是普通的socket server地址类TSockAddr的特殊类。

TInetAddr的赋值采取下面的方法:

TInetAddr iIPAddress;
const KFirewallRuleIPAddress = 10 ;
iIPAddress.SetAddress(
            INET_ADDR( KFirewallRuleIPAddress,
                       KFirewallRuleIPAddress,
                       KFirewallRuleIPAddress,
                       KFirewallRuleIPAddress
                      )
                      )

开始我没有找到使用FileStream存取IP地址的方法,所以只好把IP地址声明成了TBuf类型,因为我知道TBuf的存取方法。但是后来看到TInetAddr是TBuf8的子类,想想其存取方法应该和TBuf的一样,所以经过不断的摸索找到了正确的方法(其实不断的摸索,主要的原因是把TUint8*写成了TUint16*,导致老是无法正确的读取IP地址)。

用RFileWriterStream来写IP地址
 1     RFs iFs ; 
 2     User::LeaveIfError(iFs.Connect()) ; 
 3     RFileWriteStream writer;
 4     writer.PushL();
 5     User::LeaveIfError(writer.Replace(iFs, KFirewallRuleFileName, EFileWrite));
 6     TInet len = 0 ;
 7     len = rule.iIPAddress.Length();              
 8     writer.WriteInt32L(len);
 9     if(len)                    writer.WriteL(rule.iIPAddress.Ptr(), len ) ;            
10     writer.CommitL();            
11     CleanupStack::PopAndDestroy(); 
12     iFs.Close() ;
13 

第7行获得IP地址的长度,其实本长度是固定的12个字节,不保存也可以。
第8行将其长度写入文件中。
第9行保存IP地址到文件中。

用RFileReaderStream来读IP地址
 1     RFs iFs ; 
 2     User::LeaveIfError(iFs.Connect()) ; 
 3     RFileWriteStream writer;
 4     writer.PushL();
 5     User::LeaveIfError(writer.Replace(iFs, KFirewallRuleFileName, EFileRead));
 6     TInet len = 0 ;
 7     len = reader.ReadInt32L();
       
 8     if(len)                    reader.ReadL((TUint8*)rule.iIPAddress.Ptr(), len ) ;            
 9     rule.iIPAddress.SetLength(len) ;
10     CleanupStack::PopAndDestroy(); 
11     iFs.Close() ;
网友评论
<