?? symbian 2nd支持cmnet和cmwap的斷點續(xù)傳的rsocket實現(xiàn).htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0048)http://www.cublog.cn/u/26691/showart_459698.html -->
<HTML><HEAD><TITLE>symbian 2nd支持cmnet和cmwap的斷點續(xù)傳的RSocket實現(xiàn) - 手機開發(fā) - chenwayne</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gbk"><LINK
href="symbian 2nd支持cmnet和cmwap的斷點續(xù)傳的RSocket實現(xiàn).files/index.css"
rel=stylesheet></LINK><LINK title="ChinaUnix Blog RSS Feed"
href="http://blog.chinaunix.net/u/rss.php?id=26691" type=application/rss+xml
rel=alternate></LINK>
<META content="symbian 2nd支持cmnet和cmwap的斷點續(xù)傳的RSocket實現(xiàn) - 手機開發(fā) - chenwayne"
name=keywords>
<META
content="中國最大的IT技術(shù)博客-ChinaUnix博客:symbian 2nd支持cmnet和cmwap的斷點續(xù)傳的RSocket實現(xiàn) - 手機開發(fā) - chenwayne"
name=description>
<META content="MSHTML 6.00.2900.3314" name=GENERATOR></HEAD>
<BODY style="BACKGROUND: #c7c7c7" leftMargin=0 topMargin=0 align="center"
marginheight="0" marginwidth="0">
<TABLE style="BORDER-COLLAPSE: collapse; HEIGHT: 25px" height=25 cellSpacing=0
cellPadding=0 width=760 align=center
background="symbian 2nd支持cmnet和cmwap的斷點續(xù)傳的RSocket實現(xiàn).files/tophem1.gif"
border=0><TBODY>
<TR>
<TD id=tool-bar noWrap align=left> <A
href="http://blog.chinaunix.net/" target=_blank>博客首頁</A> <A
href="http://blog.chinaunix.net/register.php" target=_blank>注冊</A> <A
href="http://bbs.chinaunix.net/forumdisplay.php?fid=51"
target=_blank>建議與交流</A> <A href="http://blog.chinaunix.net/top/"
target=_blank>排行榜</A> <A
onclick="NewWindows('http://www.cublog.cn/addlink.php?url='+location.href+'&title='+document.title);return false;"
href="http://www.cublog.cn/u/26691/" target=_blank>加入友情鏈接</A> </TD>
<FORM id=loginForm action=/search.php method=get target=_blank>
<TD noWrap align=right><IMG id=starimg height=12 alt=""
src="symbian 2nd支持cmnet和cmwap的斷點續(xù)傳的RSocket實現(xiàn).files/userstar.gif" width=55
border=0> <A id=star title=給此博客推薦值
onclick="NewWindows(this.href);return false;"
href="http://www.cublog.cn/u2/star.php?blogid=26691">推薦</A> <A
id=complaint title=投訴此博客 onclick="NewWindows(this.href);return false;"
href="http://www.cublog.cn/u2/complaint.php?blogid=26691">投訴</A> 搜索:<INPUT
name=q> <INPUT class=button1 type=submit value=搜索> <A
href="http://www.cublog.cn/help/">幫助</A></TD></FORM></TR></TBODY></TABLE>
<SCRIPT language=javascript><!--navHover = function() {var lis = document.getElementById("navmenu").getElementsByTagName("LI");for (var i=0; i<lis.length; i++) {lis[i].onmouseover=function() {this.className+=" iehover";}lis[i].onmouseout=function() {this.className=this.className.replace(new RegExp(" iehover\\b"), "");}}}function NewWindows(shref){var xx=(window.screen.width-450)/2;var yy=(window.screen.height-200)/2;pp=window.open(shref,"win","menubar=no,location=no,resizable=no,scrollbars=no,status=no,left="+xx+",top="+yy+",Width=450,Height=200");}function $(s){return document.getElementById(s);}//--></SCRIPT>
<TABLE
style="BACKGROUND-IMAGE: url(http://www.cublog.cn/templates/newdefault/images/bg_top.gif); BORDER-COLLAPSE: collapse"
height=130 cellSpacing=0 cellPadding=0 width=760 align=center bgColor=#ecfdfd
border=0>
<TBODY>
<TR>
<TD align=middle width=500>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#2870c7 cellSpacing=0
cellPadding=0 border=1>
<TBODY>
<TR>
<TD bgColor=#ecfdfd>
<P style="MARGIN: 5px; LINE-HEIGHT: 150%"><FONT
style="FONT-SIZE: 14px" color=#1e8dc5><B>chenwayne
</B></FONT></P>放棄該放棄的是無奈,放棄不該放棄的是無能;不放棄該放棄的是無知,不放棄不該放棄的卻是執(zhí)著。。。</TD></TR></TBODY></TABLE></TD>
<TD width=260></TD></TR></TBODY></TABLE>
<TABLE style="BORDER-COLLAPSE: collapse" height=27 cellSpacing=0 cellPadding=0
width=760 align=center bgColor=#c3ddf6 border=0>
<TBODY>
<TR>
<TD align=middle><A class=list1 href="http://chenwayne.cublog.cn/"
target=_blank>chenwayne.cublog.cn</A> </TD>
<TD style="COLOR: #2a5200" align=right width=620>
<UL id=navmenu>
<LI class=ul0><A class=list1 href="http://control.cublog.cn/"
target=_blank>管理博客</A> </LI>
<LI class=ul0><A class=list1
href="http://control.cublog.cn/article_new.php" target=_blank>發(fā)表文章</A>
</LI>
<LI class=ul0 style="WIDTH: 40px"><A class=list1
href="http://www.cublog.cn/u/26691/guestbook.html">留言</A> </LI>
<LI class=ul0><A class=list1
href="http://www.cublog.cn/u/26691/links.html">收藏夾</A> <!-- 0 --></LI>
<LI class=ul0><A class=list1
href="http://www.cublog.cn/u/26691/group.html">博客圈</A> </LI>
<LI class=ul0 style="WIDTH: 40px"><A class=list1
href="http://www.cublog.cn/u/26691/music.html">音樂</A> <!-- 0 --></LI>
<LI class=ul0 style="WIDTH: 40px"><A class=list1
href="http://www.cublog.cn/u/26691/photo.html">相冊</A> <!-- 0 --></LI>
<LI class=ul0 style="WIDTH: 40px"><A class=list1
href="http://www.cublog.cn/u/26691/article.html">文章</A>
<UL class=ul1>
<LI><A href="http://www.cublog.cn/u/26691/article_59380.html">· 心情隨筆<!-- a59380 --></A><!-- 59380 -->
<LI><A href="http://www.cublog.cn/u/26691/article_42621.html">· 視頻探索<!-- a42621 --></A><!-- 42621 -->
<LI><A href="http://www.cublog.cn/u/26691/article_42622.html">· 手機開發(fā)<!-- a42622 --></A><!-- 42622 -->
<LI><A href="http://www.cublog.cn/u/26691/article_42623.html">·
linux備忘錄<!-- a42623 --></A><!-- 42623 -->
<LI><A href="http://www.cublog.cn/u/26691/article_75762.html">· PSP開發(fā)<!-- a75762 --></A><!-- 75762 --> </LI></UL></LI>
<LI class=ul0 style="WIDTH: 40px"><A class=list1
href="http://www.cublog.cn/u/26691/index.html">首頁</A> </LI></UL></TD>
<TD width=2></TD></TR></TBODY></TABLE>
<SCRIPT language=javascript>function $(s){return document.getElementById(s);}function ShowHideDiv(divid,iImg){if($(divid).style.display == "none"){iImg.src="../../templates/newdefault/images/dot2.gif";$(divid).style.display = "block";iImg.title="收起";}else{iImg.src="../../templates/newdefault/images/dot4.gif";$(divid).style.display = "none";iImg.title="展開";}}navHover();</SCRIPT>
<TABLE style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word" cellSpacing=0
cellPadding=0 width=760 align=center bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD align=middle height=30><FONT style="FONT-SIZE: 14pt"
color=#02368d><B>symbian
2nd支持cmnet和cmwap的斷點續(xù)傳的RSocket實現(xiàn)</B></FONT><BR></TD></TR>
<TR>
<TD align=middle height=9><IMG height=9 alt=""
src="symbian 2nd支持cmnet和cmwap的斷點續(xù)傳的RSocket實現(xiàn).files/right_line.gif"
width=502 border=0></TD></TR>
<TR>
<TD align=middle>
<TABLE style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word"
cellSpacing=0 cellPadding=0 width=740 border=0>
<TBODY>
<TR>
<TD width=740>
<DIV id=art style="MARGIN: 15px" width="560">
<DIV>北京理工大學(xué) 20981 陳罡</DIV>
<DIV>記得以前曾經(jīng)寫過關(guān)于斷點續(xù)傳的文章,只是舉例了win32環(huán)境下c++實現(xiàn)的單線程斷點續(xù)傳的實現(xiàn)方法和代碼。現(xiàn)在時間比較充裕了,就把symbian
2nd下面實現(xiàn)的斷點續(xù)傳代碼拿出來曬曬,希望能起到拋磚引玉的效果,更加促進這個底層模塊的穩(wěn)定性和兼容性。</DIV>
<DIV> </DIV>
<DIV>現(xiàn)在就把nettest這個symbian 2nd程序各個部分展開來分析一下:</DIV>
<DIV>nettest總體上來講分為兩部分組成,一個是常規(guī)的s60的ui相關(guān)的框架,一個是netcore支持?jǐn)帱c續(xù)傳的下載模塊。s60的ui相關(guān)框架部分包括NetTestApp.cpp,
NetTestAppUi.cpp, NetTestContainer.cpp,
NetTestDocument.cpp這些文件都是sdk的向?qū)ё詣由傻奈募瑹o需多說;netcore部分從邏輯上來看,應(yīng)該分為兩個部分,一個是常規(guī)的基于RSocket的socket
engine引擎部分,一個是M5HttpDown支持?jǐn)帱c續(xù)傳下載的模塊。其中的socket engine只是從nokia
sdk中的sockets
demo中提取出來的代碼,其本身基本上跟demo里面的socket引擎一致;另外的M5HttpDown的斷點續(xù)傳的代碼則是實現(xiàn)斷點續(xù)傳的關(guān)鍵之所在了。</DIV>
<DIV> </DIV>
<DIV>下面就是代碼的內(nèi)容和簡要的分析:</DIV>
<DIV>M5HttpDown.h頭文件的定義---></DIV>
<DIV> </DIV>
<DIV>#ifndef _M5_HTTP_DOWN_H_<BR>#include
<e32std.h><BR>#include <e32base.h><BR>#include
"socketsengine.h" // 就是普通的sockets engine了<BR>#include
"uinotifier.h" //
uinotifier是用來在屏幕上輸出一些狀態(tài)的虛基類<BR>#include "m5httpdownnotifier.h" //
收到真實的數(shù)據(jù)后進行回調(diào)的虛基類</DIV>
<DIV> </DIV>
<DIV>#define
HTTP_WEB_PORT
80<BR>#define
HTTP_TEMP_BUF_LEN
120<BR>#define
HTTP_SEND_BUF_LEN
256</DIV>
<DIV>#define HTTP_DOWN_CMWAP 0
// 定義接入點的類型,使用cmwap方式斷點續(xù)傳還是cmnet方式<BR>#define
HTTP_DOWN_CMNET 1</DIV>
<DIV> </DIV>
<DIV>// 一些常量定義,用于解析服務(wù)器返回過來的數(shù)據(jù)頭</DIV>
<DIV>_LIT8(KHttpRespOK, "200 OK") ; </DIV>
<DIV> </DIV>
<DIV>//
呵呵,這里就是移動惡心的地方了,這個Content-length通過10.0.0.172返回的竟然是小寫的length</DIV>
<DIV>// 而通過cmnet返回的則是正常的大寫的Length,這里我偷懶定義了兩次,其實可以Upper()一下,統(tǒng)一</DIV>
<DIV>// 用一種方法來處理的。<BR>_LIT8(KHttpCMWapHdrFileLen, "Content-length:
") ;<BR>_LIT8(KHttpCMNetHdrFileLen, "Content-Length: ") ;
<BR>_LIT8(KHttpClip, "/") ;
<BR>_LIT8(KHttpHdrDiv, "\r\n") ;
<BR>_LIT8(KHttpHdrEnd, "\r\n\r\n") ;
<BR>_LIT8(KHttpPrefix, "http://") ;
<BR>_LIT8(KHttpsPrefix, "https://") ; </DIV>
<DIV> </DIV>
<DIV>// 這里的CommonGet,是指不經(jīng)過斷點續(xù)傳直接下載,雖然支持?jǐn)帱c續(xù)傳,但是第一次下載的時候,</DIV>
<DIV>// 還什么文件都沒有呢,不必要使用斷點續(xù)傳,直接按照常規(guī)的下載方式下載好了</DIV>
<DIV>_LIT8(KHttpCommonGet1, "GET ") ; <BR>_LIT8(KHttpCommonGet2, "
HTTP/1.1\r\nUser-Agent: Nokia 7610\r\nHost: ") ;
<BR>_LIT8(KHttpCommonGet3, ":") ; <BR>_LIT8(KHttpCommonGet4,
"\r\nAccept: */*\r\nConnection: Keep-Alive\r\n\r\n") ;</DIV>
<DIV> </DIV>
<DIV>// 這里才是真正的斷點續(xù)傳需要的定義了,需要指定RANGE的</DIV>
<DIV>_LIT8(KHttpResumeGet1, "GET ") ;
<BR>_LIT8(KHttpResumeGet2, " HTTP/1.1\r\nUser-Agent: Nokia
7610\r\nHost: ") ; <BR>_LIT8(KHttpResumeGet3, ":") ;
<BR>_LIT8(KHttpResumeGet4, "\r\nAccept: */*\r\nRANGE: bytes=")
; <BR>_LIT8(KHttpResumeGet5, "-\r\nConnection:
Keep-Alive\r\n\r\n") ; </DIV>
<DIV> </DIV>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -