博客园丁

我是博客园的一丁,我会永不停顿,不停创新。
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

Posted on 2006-11-28 15:22  Jason.Jiang  阅读(2144)  评论(0编辑  收藏  举报

对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() ;