国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

Windows Media server SDK (3)

2024-07-21 02:28:03
字體:
來源:轉載
供稿:網友
5. 媒體服務傳輸控件
1) 類型
   - 多播
      一對多的文件傳輸, 接受者"監聽"同一個多播ip地址和端口來接收文件.
   - 單播
      一對一的文件傳輸, 接受者"監聽"多個ip地址之一和同一個斷開來接收文件.

2) 完全可靠性服務
   文件傳輸組件實現了一個多播的完全可靠性服務保證每一個數據包被收到, 保持不被破壞和完整. 如果接受者發現數據包丟失和損壞, 可以發送一個nak到發送者請求數據包重發.

   在完全可靠性服務模式下, 文件傳輸服務執行一個流控制; 這是對于速度控制的額外支持. 如果發送者傳輸數據包過快, 接受者發送一個扼殺nak提示傳輸速度必須下降. 接受者也在忙和無法接收更多數據包或者一段時間沒有收到數據包的時候發送空閑 nak.

   文件傳輸控件使用完全可靠性服務模式作為缺省模式. 如果發送者不實用該模式, 控件依舊可以接收回傳只是無法請求重傳數據包. 完全可靠性服務可以通過 fullyreliableservice 屬性關閉.

   雙向網要求完全可靠服務.

   完全可靠服務模式要求使用錯誤轉發機制(fec).

   【相關控制消息】
    - nak
      是一個發送自接收端到發送端的數據, 提示數據包被放棄. 是一個請求重發數據包的消息. 使用它是一個有效地方式添加可信度, 因為接受者只需要接收那些沒有被接收的數據包.
   - throttle nak
      來自接收端的請求, 提示發送端降低帶寬. 被完全可靠服務使用.
   - idle nak
      來自接收端的請求, 提示發送端在數據包沒有收到, 且傳輸不完整. 發送端收到的時候等待其他接收端nkas來重發請求的數據包.

3) 接收文件
   方式:
   1. 在發送者發送文件之前, 啟動一個接收操作確保所有的文件被傳輸. 如果接收操作在發送到已經開始發送一組文件后開始, 接收端接收當前文件和其余文件. 如果接收動作在發送途中開始, 接收端接收該文件.
   2. 使用 ftsstartfiletransferreceive 方法接收文件. 稱之為監聽. 針對多播傳輸, 使用一個多播地址. 針對多播傳輸使用主機的本地地址之一, 如果沒有指定本地地址, 第一個主機本地地址缺省使用. 接收端可以取消一個文件接收(ftscancelfiletransferreceive).
    狀態和進度可以通過事件和屬性在文件傳輸期間獲得.


4) 狀態提示
   ftsontransferstarted    
   ftsontransfercompleted
   ftsonfiletransferstarted
   ftsonfiletransfercompleted
   ftsonstatuschanged

5) 進度提示
   要獲得文件傳輸信息, 使用 ftsregisterstatuscallback 注冊需要的傳輸信息. 典型的請求包括 - 每100kb提示一次, 獲則每10%提示一次.

   提示也可以請求關于接收的數據包個數, 虛假數據包個數( 從同一個ip地址和端口獲得, 但是不是需要的文件部分), 重復數據包, 丟失數據包等. 進度提示由 ftsontransferprogress 事件處理. 讀取正確的屬性, 然后在事件處理子程序中采取正確的處理. 通過調用 ftsrevokestatuscallback 方法可以宣告一個提示無效.

   進度通告只在 ftsontransferprogress 時間上觸發. 傳輸進度屬性值 (諸如: numpacketsdropped)總是有效地.

6) 如何使用
   <object id="nsfile" width="100" height="51" classid="clsid:26f24a93-1da2-11d0-a334-00aa004a5fc5" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsftsinf.cab#version=3,0,0,2700"></object>

  <!-- 一個接收文件的例子, 附帶進度顯示 -->
  <script language="vbscript">
  <!--
  sub btnreceivefile_onclick
    myform.noise.value = 0
    myform.redundancy.value = 0
    call nsfile1.ftsregisterstatuscallback(0, 0, 4096, 4096, 0, 0, 0, 0, 0, 0, 0)
    on error resume next
    call nsfile1.ftsstartfiletransferreceive("239.230.50.50", 5050, "", "%temp%/", 0, 1025)
    if  err.number then msgbox "start error = " & returnerror(err.number)
  end sub

  sub btncancelfile_onclick
    call nsfile1.ftscancelfiletransferreceive
    msgbox "transfer cancelled. error = " & returnerror(nsfile1.result)
  end sub

  sub nsfile1_ftsontransferprogress
    myform.totalbytes.value = nsfile1.numtotalbytestransferred
    myform.databytes.value = nsfile1.numtotaldatabytestransferred
    myform.packets.value = nsfile1.numpacketstransferred
    myform.bogus.value = nsfile1.numboguspacketsreceived
  end sub

  sub nsfile1_ftsontransfercompleted
    msgbox "transfer completed. error = " & returnerror(nsfile1.result)
    totalbytes = nsfile1.numtotalbytestransferred
    if totalbytes > 0 then
      databytes = nsfile1.numtotaldatabytestransferred
      myform.redundancy.value = int(((totalbytes - databytes)/totalbytes)*100)
      packets = nsfile1.numpacketstransferred
      bogus = nsfile1.numboguspacketsreceived
      myform.noise.value = int(bogus/packets)
      myform.totalbytes.value = nsfile1.numtotalbytestransferred
      myform.databytes.value = nsfile1.numtotaldatabytestransferred
      myform.packets.value = nsfile1.numpacketstransferred
      myform.bogus.value = nsfile1.numboguspacketsreceived
    end if
  end sub

  sub btnabout_onclick
    call nsfile1.aboutbox()
  end sub

  function returnerror(byval errnum)
    select case errnum
       case 0
          errstring = "no error"
       case 1
          errstring = "already requested"
       case -2147467260
          errstring = "cancelled"
       case -2147467259
          errstring = "failed"
       case -2147287038
          errstring = "file not found"
       case -2147024882
          errstring = "out of memory"
       case -2147024809
          errstring = "invalid parameter"
       case -2147023436
          errstring = "timed out"
       case else
          errstring = "unknown error " & cstr(hex(errnum))
    end select
    returnerror = errstring
  end function

  -->
  </script>

  <!-- 一個完整的接收文件例子 -->
  <html>
  <head><title>total fts demo</title>
  <link rel="stylesheet" type="text/css" href="../msdn_ie4.css">
  </head>
  <body bgcolor="#ffffff">


  <h2>total file transfer service demo</h2>


  <object id="nsfile1"  
  codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsftsinf.cab#version=3,0,0,2700"
   classid="clsid:26f24a93-1da2-11d0-a334-00aa004a5fc5" align="right" height="10" width="10">
  <param name="_version" value="65536">
  <param name="_extentx" value="2646">
  <param name="_extenty" value="1323">
  <param name="_stockprops" value="0">
  </object>


  <form name="myform">
  <table>
  <tr>
  <td><b>source ip:</b></td><td><input type="text" name="ipaddr" value="239.230.50.50"></td>
  <td><b>source port:</b></td><td><input type="text" name="ipport" value="5050" size="6"></td>
  <td><b>filter:</b></td><td><input type="text" name="filter"></td>
  </tr>
  </table>
  <hr size=1>

  <table>
  <tr>
  <td><b>path:</b></td><td><input type="text" name="filepath" value="%temp%/"></td>
  <td><b>attributes:</b></td><td><input type="text" name="attributes" value="0"></td>
  <td><b>flags:</b></td><td><input type="text" name="flags" value="1025"></td>
  </tr>
  </table>
  <hr size=1>


  <table>
  <tr>
  <td><input type="button" name="btnreceivefile" value="start receive"></td>
  <td><input type="button" name="btncancelfile" value="cancel"></td>
  <td><input type="button" value="about fts" name="btnabout"></td>
  <td width="25"></td>
  <td width="50"><input type="text" name="routing"></td>
  <td width="25"></td>
  <td align="right" width="75"><b>start time:</b></td>
  <td width="150"><input type="text" name="starttime"></td>
  </tr>
  </table>
  <hr size=1>

  <table>
  <tr>
  <td><b>files:</b></td><td><input type="text" name="numfiles" size="5"></td>
  <td><b>percent file:</b></td><td><input type="text" name="perfiledata" size="30"></td>
  <td><b>time taken:</b></td><td><input type="text" name="mytime"></td>
  </tr>
  </table>
  <hr size=1>

  <table>
  <tr>
  <td><b>current file:</b></td><td><input type="text" name="currfile" size="30"></td>
  <td><b>size:</b></td><td><input type="text" name="currsize" size="16"></td>
  <td><b>attributes:</b></td><td><input type="text" name="currattr" size="6"></td>
  </tr>
  </table>
  <hr size=1>

  <table>
  <tr>
  <td><b>total bytes:</b></td><td><input type="text" name="totalbytes"></td>
  <td><b>data bytes:</b></td><td><input type="text" name="databytes"></td>
  </tr>
  <tr>
  <td><b>packets:</b></td><td><input type="text" name="packets" size="8"></td>
  <td><b>bogus:</b></td><td><input type="text" name="bogus" size="8"></td>
  <td><b>drop:</b></td><td><input type="text" name="packdrop" size="8"></td>
  </tr>
  <tr>
  <td><b>corr:</b></td><td><input type="text" name="packcorr" size="8"></td>
  <td><b>dupes:</b></td><td><input type="text" name="packdup" size="8"></td>
  </tr>
  </table>
  <hr size=1>

  <table>
  <tr>
  <td><b>source path:</b></td><td><input type="text" name="srcpath" size="35"></td>
  </tr>
  <tr>
  <td><b>destination path:</b></td><td><input type="text" name="destpath" size="35"></td>
  </tr>

  <tr>
  <td><b>endpoint address:</b></td><td><input type="text" name="endaddr" size="16"></td>
  <td><b>endpoint port:</b></td><td><input type="text" name="endport" size="8"></td>
  </tr>

  <tr>
  <td><b>source addresss:</b></td><td><input type="text" name="srcaddr" size="16"></td>
  <td><b>source port:</b></td><td><input type="text" name="srcport" size="8"></td>
  </tr>

  <tr>
  <td><b>local address:</b></td><td><input type="text" name="locaddr" size="16"></td>
  <td><b>local port:</b></td><td><input type="text" name="locport" size="8"></td>
  </tr>
  <tr>
  <td><b>local port used:</b></td><td><input type="text" name="lastport" size="16"></td>
  </tr>
  </table>
  <hr size=1>

  </form>



  <script language="vbscript">
  <!--
  sub btnreceivefile_onclick
   on error resume next
   '--- initialize form values.
   myform.mytime.value = ""
   myform.starttime.value = ""
   myform.numfiles.value = ""
   myform.perfiledata.value = ""
   myform.totalbytes.value = ""
   myform.databytes.value = ""
   myform.currfile.value = ""
   myform.currattr.value = ""
   myform.currsize.value = ""
   myform.packets.value = ""
   myform.bogus.value = ""
   myform.packdrop.value = ""
   myform.packcorr.value = ""
   myform.packdup.value = ""
   myform.srcpath.value = ""
   myform.destpath.value = ""
   myform.endaddr.value = ""
   myform.endport.value = ""
   myform.srcaddr.value = ""
   myform.srcport.value = ""
   myform.locaddr.value = ""
   myform.locport.value = ""
   myform.lastport.value = ""
   '--- determine routing.
   if myform.ipaddr.value = "" then
    myform.routing.value = " listen for unicast"
    myipaddr = ""
    nsfile1.type = 2
   else
    myipaddr = myform.ipaddr.value
    myform.routing.value = "listen for multicast"
   end if
  '--- set up callbacks.
   call nsfile1.ftsregisterstatuscallback(4096, 5, 8192, 8192, 1, 1, 1, 1, 1, 4+8+16+32, 0)
  '--- start transfer.
   call nsfile1.ftsstartfiletransferreceive(myipaddr, myform.ipport.value, myform.filter.value,  myform.filepath.value, myform.attributes.value, myform.flags.value)
   if err.number then msgbox "start error = " & returnerror(err.number)
  end sub

  sub btncancelfile_onclick
   on error resume next
   call nsfile1.ftscancelfiletransferreceive
   msgbox "transfer cancelled. error = " & returnerror(nsfile1.result)
  end sub

  sub nsfile1_ftsontransferstarted
   on error resume next
   myform.starttime.value = time()
   myform.srcpath.value = nsfile1.sourcefilepath
   myform.destpath.value = nsfile1.destinationfilepath
   myform.endaddr.value = nsfile1.endpointaddress
   myform.endport.value = nsfile1.endpointport
   myform.srcaddr.value = nsfile1.sourceaddress
   myform.srcport.value = nsfile1.sourceport
   myform.locaddr.value = nsfile1.localaddress
   myform.locport.value = nsfile1.localport
   myform.lastport.value = nsfile1.localportused
  end sub

  sub nsfile1_ftsonfiletransferstarted
   on error resume next
   myform.currfile.value = nsfile1.currentfilepath
   myform.currattr.value = nsfile1.currentfileattributes
   myform.currsize.value = nsfile1.currentfilesize
  end sub

  sub nsfile1_ftsonfiletransfercompleted
   on error resume next
   myform.numfiles.value = nsfile1.numfilestransferred
  end sub

  sub nsfile1_ftsontransferprogress
   on error resume next
   myform.numfiles.value = nsfile1.numfilestransferred
   progbar = int((nsfile1.percentfiledatabytestransferred)/5)
   if progbar < 20 then
   myform.perfiledata.value = string(progbar, "?)
   else
   myform.perfiledata.value = "file transferred!"
   end if
   myform.totalbytes.value = nsfile1.numtotalbytestransferred
   myform.databytes.value = nsfile1.numtotaldatabytestransferred
   myform.packets.value = nsfile1.numpacketstransferred
   myform.bogus.value = nsfile1.numboguspacketsreceived
   myform.packdrop.value = nsfile1.numpacketsdropped
   myform.packcorr.value = nsfile1.numpacketscorrected
   myform.packdup.value = nsfile1.numduplicatepacketsreceived
  end sub

  sub nsfile1_ftsontransfercompleted
   on error resume next
   ttime = timevalue(now) - timevalue(myform.starttime.value)
   myform.mytime.value = "total = " & hour(ttime) & " h " & minute(ttime) & " m " & second(ttime) & " s"
   msgbox "transfer completed. error = " & returnerror(nsfile1.result)
  '--- bytes
   myform.numfiles.value = nsfile1.numfilestransferred
   myform.perfiledata.value = "file transferred!"
   myform.totalbytes.value = nsfile1.numtotalbytestransferred
   myform.databytes.value = nsfile1.numtotaldatabytestransferred
   myform.currfile.value = nsfile1.currentfilepath
   myform.currattr.value = nsfile1.currentfileattributes
   myform.currsize.value = nsfile1.currentfilesize
  '--- packets
   myform.packets.value = nsfile1.numpacketstransferred
   myform.bogus.value = nsfile1.numboguspacketsreceived
   myform.packdrop.value = nsfile1.numpacketsdropped
   myform.packcorr.value = nsfile1.numpacketscorrected
   myform.packdup.value = nsfile1.numduplicatepacketsreceived
  end sub

  sub btnabout_onclick
   call nsfile1.aboutbox()
  end sub

  function returnerror(byval errnum)
   select case errnum
   case 0
    errstring = "no error"
   case 1
    errstring = "already requested"
   case -2147467260
    errstring = "cancelled"
   case -2147467259
    errstring = "failed"
   case -2147287038
    errstring = "file not found"
   case -2147024882
    errstring = "out of memory"
   case -2147024809
    errstring = "invalid parameter"
   case -2147023436
    errstring = "timed out"
   case else
    errstring = "unknown error " & cstr(hex(errnum))
   end select
   returnerror = errstring
  end function
  -->
  </script>

  </body>
  </html>


商業源碼熱門下載www.html.org.cn

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汤阴县| 常熟市| 惠安县| 馆陶县| 宜良县| 南投县| 潜江市| 镇赉县| 牡丹江市| 体育| 开封市| 浏阳市| 高要市| 潼关县| 威宁| 德昌县| 屯昌县| 松滋市| 广丰县| 滦平县| 冕宁县| 疏勒县| 获嘉县| 莒南县| 麟游县| 霍林郭勒市| 岑溪市| 太原市| 肥乡县| 湖口县| 平阳县| 金山区| 长岭县| 新河县| 个旧市| 定远县| 巫山县| 洛南县| 应用必备| 浦东新区| 伊川县|