对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() ;
  • 0
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值