标题:向高手求助力:有没有什么办法用asp将torrent文件信息提取出来
只看楼主
职业借钱
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-8-19
 问题点数:0 回复次数:0 
向高手求助力:有没有什么办法用asp将torrent文件信息提取出来
最近做的一个项目需要用asp将torrent文件信息提取出来,不知道各位高手有没有什么办法,有知道的麻烦帮帮忙,谢谢!
下面是我找到的一段相关的代码,可是不能用

程序代码:
<%
class CBencodingInteger

 public lngPosition '在文件中的位置

 public lngLength '其全部结构包括子数据的长度

 public dblValue  '值
end class 
class CBencodingString

 public lngPosition '在文件中的位置

 public lngLength '其全部结构包括子数据的长度

 public binValue  '值
end class
Class CBencodingList

 Public lngPosition,lngLength

 Private m_aobj,m_intCount

 

 Private Sub class_initialize()
  ReDim m_aobj(0)
  m_intCount=0

 End Sub 


 Public Property Get Count()
  Count=m_intCount

 End Property 


 Public Default Function Item(intIndex)
  If intIndex<0 Or intIndex>=m_intCount Then Err.raise vbObjectError,"Item()","index overflow"
  Set Item=m_aobj(intIndex)

 End Function 


 Public Function Add(objItem)
  ReDim preserve m_aobj(m_intCount)
  Set m_aobj(m_intCount)=objItem
  m_intCount=m_intCount+1

 End Function 
End Class 

Class CBencodingDictionary

 Public lngPosition,lngLength

 private m_objDict

 

 Public Sub class_initialize()
  Set m_objDict=CreateObject("scripting.dictionary")

 End Sub 


 Public Default Function Item(strIndex)
  If m_objDict.Exists(strIndex) then 
   Set Item=m_objDict.item(strIndex)
  else
   Err.raise vbObjectError,"Item()","not such key in dictionary."
  End If 

 End Function 


 Public Function Add(strKey,objItem)

  m_objDict.add strkey,objItem

 End Function 


 Public Property Get Count()
  Count=mobjDict.count 

 End Property 
End Class 

'将byte()字符转化为vbString
Function PickBinChar(binSrc,lngPos)

 PickBinChar=midb(binSrc,lngPos,1)&Chrb(0)
End Function 

'读取整数
'[in]binSrc
'[in,out]lngCurpos
'[in]lngMaxPos
'[out]objRet
Function readInteger(binSrc,lngCurPos,objRet)

 Dim i,j

 Dim chrBuf

 Dim strNum,dblNum

 Dim lngBakPos


 lngBakPos=lngCurPos '直接更改解析位置lngCurPos好处是发生err,可以知道错误的字符位置

 Set objRet=Nothing 


 If PickBinChar(binSrc,lngCurPos)<>"i" Then Err.raise vbObjectError,"readInteger()","'i' head missing."


 lngCurPos=lngCurPos+1


 i=0

 strNum=""

 chrBuf=PickBinChar(binSrc,lngCurPos)

 Do While chrBuf<="9" And chrBuf>="0" 
  strNum=strNum & chrBuf
  lngCurPos=lngCurPos+1
  chrBuf=PickBinChar(binSrc,lngCurPos)
  i=i+1
  If i>MAX_INT_LEN Then Err.raise vbobjectError,"readInteger()","Integer overflow."

 Loop 


 If chrBuf<>"e" Then Err.raise vbobjectError,"readInteger()","'e' rare missing."

 If strNum="" Then Err.raise vbObjectError,"readInteger()","empty between 'i' and 'e'."


 Set objRet=new CBencodingInteger

 objRet.lngPosition=lngBakPos

 objRet.lngLength=lngCurPos-lngBakPos

 objRet.dblValue=CDbl(strNum)


 lngCurPos=lngCurPos+1
End Function 

'readString,readList,readDictionary我就不贴了,基本类似,就是dictionary和list的位置指针要小心一些


'测试


Function LoadFromFile(strPath,bin)  '也可以改成request.binaryread,不过要先处理一下multiform数据格式

 Dim objAdoStm


 Set objAdoStm=CreateObject("adodb.stream")

 objAdoStm.Type=1

 objAdoStm.Mode=3

 objAdoStm.Open


 objAdoStm.LoadFromFile strPath

 objAdoStm.Position=0

 bin=objAdoStm.Read(-1)


 objAdoStm.close 

 Set objAdoStm=Nothing 
End Function 

Debug:Sub Debug()

 Dim bin

 LoadFromFile "test.torrent",bin


 Dim objTmp

 '解析根节点,以此递归解析全部文件

 readDictionary bin,1,0,objTmp 

 '显示第0个节点的IP位置

 

 MsgBox byte2Str(objTmp.item("nodes").item(0).item(0).binValue)
End Sub
%>
搜索更多相关主题的帖子: torrent asp 
2009-08-20 10:34



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-283263-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.056658 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved