成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺談MTK平臺用Socket實現HTTP請求過程

移動開發
MTK平臺用Socket實現HTTP請求過程是本文要介紹的內容,通過MTK平臺中數據的請求的案例,來學習MTK平臺的應用,具體來看本文詳解。

MTK平臺用Socket實現HTTP請求過程是本文要介紹的內容,主要是來了解并學習MTK平臺的應用,通過MTK平臺中數據的請求的案例,來學習MTK平臺的應用,具體內容的實現來看本文詳解。

一、MTK平臺Socket聯網過程

熟悉PC機編程的人都知道,Socket編程接口分兩套:TCP和UDP;TCP和UDP中又有服務器端和客戶端的概念,這里講的是TCP的客戶端編程接口。

MTK平臺中Socket創建步驟:

1、soc_create()創建Socket;

2、soc_setsockopt設置Socket為非阻塞模式;

3、soc_setsockopt設置Socket選項為連接,讀,寫,關閉;不清楚為什么要連續設置兩次;

4、如果是CMNET聯網并且請求中用到了英文域名還需要解析域名soc_gethostbyname,除非使用ip作為域名,解析出來的IP作為我們建立連接的目標IP;如果是CMWAP聯網,直接跳到第5步,直接連接移動或聯通的網關:10.0.0.172:80;

5、soc_connect與服務器建立連接;

6、soc_send發送請求;

7、soc_recv接收服務器返回的數據;

8、soc_close關閉Socket;

9、如果需要關閉數據賬戶soc_close_nwk_account

二、CMNET,CMWAP方式下的HTTP請求內容格式

HTTP請求格式:

GET方法

MTK平臺中模擬器里wap瀏覽器發送的請求內容

  1. “GET/go_13596557HTTP/1.1  
  2. Host:kong.net  
  3. User-Agent:SQH_D480B_01/LB19504/WAP2.0Profile  
  4. Accept:application/vnd.wap.wmlc,**//(想當長,省去后面部分)  
  5. Accept-Charset:utf-8,utf-16,iso-8859-1,iso-10646-ucs-2,GB2312,windows-1252,us-ascii  
  6. Accept-Language:zh-tw,zh-cn,en  
  7. Cookie:JSESSIONID=aAQP0FIXp3z7 
  8. Connection:Keep-Alive  
  9. ” 

POST方法

對一些需要向服務器傳入參數的請求,按名稱搜索等請求。還以空中網天氣查詢為例,之中的其他城市天氣查詢,輸入其他城市名稱或電話區號查詢:

  1. “POST/weather/search.jsp?setcity=1HTTP/1.1  
  2.  
  3. Host:kong.net  
  4.  
  5. User-Agent:SQH_D480B_01/LB19504/WAP2.0Profile  
  6.  
  7. Accept:application/vnd.wap.wmlc,*/*//(想當長,省去后面部分)  
  8.  
  9. Accept-Charset:utf-8,utf-16,iso-8859-1,iso-10646-ucs-2,GB2312,windows-1252,us-ascii  
  10.  
  11. Accept-Language:zh-tw,zh-cn,en  
  12.  
  13. Content-Type:application/x-www-form-urlencoded;charset=utf-8  
  14.  
  15. Cookie:KONG_ACCESS=AWYZhg==;JSESSIONID=a91MDc6qoMYf 
  16.  
  17. Connection:Keep-Alive  
  18.  
  19. Content-Length:46//get方法沒有這一項  
  20.  
  21. ××××××//傳給服務器46字節長的數據(參數)  
  22.  
  23. ” 

當然如果是CMWAP聯網方式也要和上述的GET方法一樣設置Host和X-Online-Host項,Host:10.0.0.172

  1. X-Online-Host:kong.net 

以上的內容,可以在調試狀態下運行模擬器的wap瀏覽器,在soc_send方法處插入斷點觀察。

#p#

三、CMNET,CMWAP連接差別

1、GPRS賬戶:

與pc機上的socket客戶端接口不同,手機客戶端在soc_create,soc_gethostbyname接口中都多了參數nwt_acount_id,只的是一般在“網絡服務”->“數據賬戶”->“GPRS”下的GPRS數據賬戶id,一般起始的一個賬戶id是10,往下遞增1,在建立連接過程中,如果是CMWAP方式聯網,soc_create,soc_gethostbyname接口就要設置接入點為CMWAP的賬戶id,CMNET就要設置接入點為CMNET的賬戶。

2、目標服務器:

還以空中網的天氣服務為例,CMNET情況下,soc_connect需要連接”221.179.172.2”這個ip,如果請求的url為”http://kong.net/weather/home.jsp”,還需要調用soc_gethostbyname接口去解析域名;

如果是CMWAP方式聯網,soc_connect只需要連接移動或聯動的網關”10.0.0.172:80”。

3、HTTP請求內容格式(或稱報文):

如第二節所述。

四、SIM1還是SIM2聯網

SIM1還是SIM2聯網,MTK平臺是通過創建socket時傳入的nwt_acount_id區分的,如果是SIM1上網,賬號就是指的是一般在“網絡服務”->“數據賬戶”->“GPRS”下的對應的GPRS數據賬戶id;如果是SIM2,通過在四字節的賬戶id其他字節設置掩碼來區分。

設置接口比如07B平臺的always_ask_encode_data_account_id,6235_08A的cbm_encode_data_account_id接口。不同MTK平臺可能略有差別。

五、聯通卡還是移動卡?

參考其他Socket聯網代碼中有的以接入點是否為”uniwap”來判斷是不是聯通的代理上網,但是通過實驗,即使在聯通卡時連接移動的”cmwap”賬戶,也是可以正常聯網的。不知道設計“GPRS數據賬戶”的最初意圖是什么?通過apn來區分同一內部ip地址網關不同的公網ip嗎?如有高人路過,請指點;

六、HTTP1.1與Transfer-Encoding為chunked的編碼方式

發送一個請求后,如果服務器返回的消息頭內容包括“Transfer-Encoding:chunked”那么他的傳輸編碼為“chunked”類型。這種傳輸類型的數據體內容格式是這樣:

[16進制數字字符串1到4個字節len]\r\n

[len長的數據體]\r\n

[16進制數字字符串1到4個字節len]\r\n

[len長的數據體]\r\n

[16進制數字字符串1到4個字節len==0]\r\n\r\n

其中,長度len是16進制的數字,表示本段數據體的長度(字節數),回車換行后,就是這一段數據真實內容,這就是一段數據體的格式,一段接一段;直到數據體長度為0的數據段出現,緊接著兩個回車換行,標識本次請求的數據均已接收完畢。不過socket可以根據soc_recv返回值等于0來判斷接收數據結束。如果收到的是這個編碼類型的內容,需要對接收到的數據進行處理。

七、MTK平臺的S8類型的誤導

MTK平臺定義的兩個數據類型U8和S8,一看名稱我們可能會以為是unsignedchar和signedchar,但事實并非如此,

  1. typedefcharS8;  
  2. typedefunsignedcharU8; 

MTK平臺的char默認也是unsignedchar類型的,soc_gethostbyname返回值類型是kal_int8(typedefsignedcharkal_int8;),如果S8或平臺的char類型是有符號的字符型,那么,kal_int8和S8應該是等價的,但用S8類型變量作為soc_gethostbyname的返回值時,經常返回254導致域名不會被正常解析,其實應該返回SOC_WOULDBLOCK(-2),應該是阻塞碼,將soc_gethostbyname返回值類型改為kal_int8后,就能正常處理域名解析了。這證明平臺的S8類型及char類型默認是無符號的。

mtk平臺camera流程原理(轉+改)

以23C的平臺為例子。

1.mmi_camera_entry_app_screen進入MMI,CAMERA進行分配動態內存,供采集數據處理。

2.mmi_camera_entry_app_screen_internal,進入判斷T卡等環境相關,---》CAMERA_ENTER_STATE(CAMERA_STATE_PREVIEW),進入預覽狀態,mmi_camera_entry_preview_state,獲取用戶的對CAMERA的設置參數,如大小,特效等參數。同時,注冊進入CAMERA后的快捷鍵,為CAMERA的界面,畫OSD層,畫出左右軟鍵到OSDLAYER的BUFFER中,通過該函數mmi_camera_preview_set_blt_layer合并OSD層和基層,通過函數gdi_layer_blt_previous實現把合并后的層數據刷到LCD上。

3.mmi_camera_preview_start,開始進入CAMERA預覽狀態,獲得并初始化CAMERA驅動所要的設置參數(camera_setting_data),通過gdi_layer_push_and_set_active函數激活CAMERA的PREVIEW層,也就是預覽時的BUFFER用來保存SENSOR輸出的數據。

4.mdi_camera_preview_start,--》mdi_camera_preview_start_internal,設置好狀態,準備打開SENSOR了,取得驅動需要的各種參數(cam_preview_data),

5.media_cam_preview,發送消息到下層,通知打開SENSOR,設置好CAMERA預覽的事件,

6.cam_preview_req_hdlr,下層開始啟動CAMERA預覽事件。

接下來,預覽的刷屏都是通過SENSOR的VSYC接到中斷上來實現的,每來個VSYC中斷,把PREVIEWLAYER的BUFFER,經過YUV-RGB的轉換,通過DMA配置來刷到LCD上。

由于MTK把刷屏的那部分沒有開放,所以跟到6就跟不下去了,在6那里有幾個CAM_SET_EVENT(CAM_EVT_PREVIEW);由于對MTK的操作系統不是很熟悉,不知道這句話是什么意思,#defineCAM_SET_EVENT(evt_)do{\

  1. kal_set_eg_events(cam_context_p->cam_event,(evt_),KAL_OR);\  
  2. CAM_SET_EVT(evt_,__LINE__);\  
  3. }while(0) 

預覽過程中通過一個while循環不斷發中斷完成

#p#

mtk平臺,相關問題總結

下面是在mtk平臺,遇到的一些問題,我將其保存,大家可以看看:

編譯前請將..customcommonvram_lid_statistics.h文件和tst文件夾的屬性、plutommiCustomerCustomize下的GCML.txt改為可讀寫。

Release版本的時候,MMI/MiscFramework/MiscFrameworkSrc/UCS2.c不能刪除,因為,resgen要用倒ucs2.c

1:深路經覆蓋淺路徑文件

2:只有ADD_APPLICATION_MENUITEM,ADD_APPLICATION_MENUITEM2兩種添加菜單方式

3:添加菜單的時候一定要,指定子菜單的個數

4:CmsWapMmsAdp.h文件中,如果是26項目,不要打開28開關

  1. #defineSUPPORT_MTK_6226  
  2. #if0  
  3. #ifdefSUPPORT_MTK_6228  
  4. #defineCMS_SURPPORT_PNG_BMP  
  5. #endif  
  6. #endif 

5:Res_SAT.c中,如果用移軟的庫,要將

  1. #ifndefCMS_NEW_APP  
  2. ADD_APPLICATION_MENUITEM((SERVICES_WAP_MENU_ID,MAIN_MENU_SERVICES_MENUID,0,SHOW,NONMOVEABLE|SHORTCUTABLE,DISP_LIST,  
  3. SERVICES_WAP_STRING_ID,SERVICES_WAP_IMAGE_ID));  
  4. #endif 

注釋掉

6:DataAccountDef.h中添加

  1. #include"custom_mmi_default_value.h" 

用來防止

  1. #ifdefMAX_GPRS_USER_NAME_LEN  
  2. #defineMAX_GPRS_USERNAMEMAX_GPRS_USER_NAME_LEN-1  
  3. #else  
  4. #defineMAX_GPRS_USERNAME15  
  5. #endif  
  6. #ifdefMAX_GPRS_PASSWORD_LEN  
  7. #defineMAX_GPRS_USERPASSWDMAX_GPRS_PASSWORD_LEN-1  
  8. #else  
  9. #defineMAX_GPRS_USERPASSWD15  
  10. #endif 

的偏差

7:頭文件打不開,很可能在

make中的相應文件里,沒有加這個路徑

如:plutommi.inc文件中沒有包含相應路徑

8:useragentprofile在文件cmswapmmsadp.c

9:mtk28,在mms_send_message函數中,要將

  1. MMS_SetMaxSize(gconfig.sendsize,gconfig.retrievesize); 

放在

  1. MMS_Init(); 

之后,否則,發彩信會重啟

10:mms_init_global_param此函數中設置了mms的相關參數,

還有

  1. mms_init_pre_setting_file_chinamobile 

改為gconfigtemp.gprs_mode=4

[2wap]

wap里的wap_init_pre_setting_file_chinamobile函數

帳號改為

  1. gWapTemp.gprs_mode=14//WAP_SERVICE_CHINAMOBILE+GSM_NET_ACCOUNT; 

11:cmswapmmsadp.h中有wap,mms相關設置

12:將開關

  1. #ifdefined(CMS_NEW_APP)||defined(MMS_SUPPORT)  
  2. #define__MMI_STATUS_ICON_MMS__  
  3. #endif 

打開,否則來彩信的時候沒有未讀圖標

13:收發彩信的時候,底下的白色部分

修改mmi_mms_show_send_receive_status函數中的

  1. UI_fill_rectangle(0,MMS_PROGRESS_INDICATOR_HEIGHT,UI_device_width-1,  
  2.  
  3. 10,UI_color(255,255,255)); 

14、我們發了新版本給貴方,如果需要打trace請在手機上開啟trace,方法:

1:Idle->輸入*#34364#,選擇第2項設備,--〉7項,setuart->1項TSTConfig-〉

uartport選擇uart1完成,重啟

15、gif重復播放,gif圖像消失的解決方式

(1)在播放前添加gdi_image_gif_reset();

#p#

16:Idle來短信進入了短信inbox,沒有進合一接口

  1. #ifdefined(CMS_NEW_APP)&&defined(SUPPORT_SMSMMS_COMBINE)  
  2. externvoidmmi_mms_entry_inbox(void);  
  3. #endif  
  4. voidmmi_msg_exit_inbox_list_dummy(void)  
  5. {  
  6. memset(&currHistory,0,sizeof(currHistory));  
  7.  
  8. #ifdefined(CMS_NEW_APP)&&defined(SUPPORT_SMSMMS_COMBINE)  
  9. currHistory.scrnID=SCR_ID_MMS_INBOX;  
  10. #else  
  11. currHistory.scrnID=SCR_ID_MSG_INBOX_LIST;  
  12. #endif  
  13. SetMessagesCurrScrnID(0);  
  14. g_msg_cntx.MessagesScrnIdToDelHistoryNodes=SCR_ID_MSG_INBOX_LIST;  
  15. g_msg_cntx.MessagesScrnIdDelUptoHistoryNodes=SCR_ID_MSG_INBOX_LIST;  
  16. #ifdefined(CMS_NEW_APP)&&defined(SUPPORT_SMSMMS_COMBINE)  
  17. currHistory.entryFuncPtr=mmi_mms_entry_inbox;  
  18. #else  
  19. currHistory.entryFuncPtr=mmi_msg_entry_inbox_list;  
  20. #endif 

17、filter.txt文件用于模擬器的編譯,此文件中定義的開關,都將被模擬器過濾掉,所以如果第三方release的軟件不能支持模擬器就要將其在模擬器上過濾掉

18、MTK23:我們模擬器在開機無法正常啟動時,可以將MTK23_07AW0736MPmodisWIN32FSDRIVE_CNVRAMNVD_DATA下的數據文件全部清除,在從新啟動模擬器,一般都可以成功啟動。這是因為我們在修改nvram值的時候,這個目錄下的值沒有從新生成,所以會出現錯誤

19、editor出現滾動條覆蓋虛擬鍵盤的情況,有可能是mmi_pen_editor_vk_show()中算的changed_height不對

20、去掉手機觸摸屏校驗在PhnsetNeedFactoryDefaultCalibration()中

21、recorder在退出的時候,要清除與hmchip之間所注冊的handler

此外:mdi_video_rec_save_file()中一句代碼不應該注釋掉,記得要打開media_vid_file_merge()

vis_merge_recorder_file()是用來保存視頻文件的

22、recorder在stop的時候,沒有stoppreview,所以我們要加上stoppreview的消息,然后我們還需要closefile。media_vid_close()是player用的

23、默認支持超級終端,如果要使用Mtk的Trace,設置步驟:

1.輸入*#3646633#,進入工程模式

2.DeviceSetUARTTracesetting選擇TracesettingON手機重起之后就可以了

3.如果只關心cdma_print的Trace信息。只選擇MOD_DISPATCH模塊即可

24、指定模擬器heap大小,ZM300300指定義的大?。ㄊ謱憰r候出現的問題)

25、手寫在imeres.c中,參數

  1. IME_HAND_WRITING_ATTRIB(MMI_FALSE,IME_HAN_WRITING_INVALID_INPUT_MODE,GUI_VIRTUAL_KEYBOARD_TRAY,PEN_EDITOR_SIMPLIFIED_CHINESE) 

PEN_EDITOR_SIMPLIFIED_CHINESE用于在手寫時,獲取當前的輸入法后,此參數將被mmi_pen_editor_get_hand_writing_type_by_input_mode()返回并傳給手寫模塊,用于識別當前輸入法,給出相近文字

26:手寫可以用庫來調試,步驟如下:

1、用wentonginterface.c替換掉原來的文件,并將WTRecognizeUShort定義換為WTRecognize。

  1. #ifdefDEBUG_IN_WIN32_FOR_HANDWRIGING  
  2. WTErrorWTRecognize(unsignedshort*PointData,shortPointsNumber,unsignedshort*CandidateResult,char*RamAddress);  
  3. #else  
  4. WTErrorWTRecognizeUShort(unsignedshort*PointData,shortPointsNumber,unsignedshort*CandidateResult,char*RamAddress);  
  5. #endif 

2、RecoCore.obj為手寫模擬器的庫,加入即可。此過程遇到模擬器heap大小問題,如25所示修改

27:修改editor默認輸入法的時候,在Nvram_cust_pack.c中數組

  1. kal_uint8constNVRAM_CACHE_SHORT_DEFAULT[NVRAM_CACHE_SIZE]=  
  2. {  

中修改

  1. 0x0E,0x00, 

記住此時還需修改

  1. 0x0E,0x00, 

后者用于恢復出廠設置的時候,系統來取值

修改nvram的時候,要相應升級custom_nvram_editor_data_item.h中,

  1. #defineNVRAM_EF_CACHE_SHORT_LID_VERNO"004" 

我們現在發現一個問題,如果我們修改了nvram里面的一個默認設置的值,如果我們不修改對應的版本號的話,在升級手機的時候就必須要format才可以正常讀出我們新設置的值,但是在實際的操作中,這樣會把經過硬件校準過的數據清除掉(尤其是客戶在量產后進行升級),會造成一些預想不到的錯誤,所以請大家在修改了nvram的值以后,一定要修改相應的版本號。舉例如下:

如果我們修改了:

  1. NVRAM_EF_PHB_COMPARE_DIGIT_DEFAULT 

那應該同時修改與其對應的NVRAM_EF_PHB_COMPARE_DIGIT_LID的版本:

  1. VER(NVRAM_EF_PHB_COMPARE_DIGIT_LID)  
  2. 即:  
  3. NVRAM_EF_PHB_COMPARE_DIGIT_LID_VERNO 

一般的情況,我們修改的方法是:增加一個版本號

請各個reviewleader在給大家review的時候一定要注意這個問題。

28:

將lib解開的命令

  1. ar-xcustom.lib 

將文件打包成lib的命令

  1. ar-cruscustom.lib*.obj 

29:vc模擬器出現errorLNK2005錯誤,如:

  1. mstdXXXX.lib(afxmem.obj):errorLNK2005:"void__cdecloperatordelete(void*)"(??3@YAXPAX@Z)alreadydefinedinLIBCD.lib(delop.obj) 

這是因為兩個vc庫沖突,把后者LIBCD.lib在vc設置中屏蔽掉即可。

方法如下:

Vc設置==》link==》選擇input選項,在ignorelibraries中寫上LIBCD.lib(要屏蔽的庫)

即可

30:mtk平臺底層聲音轉換在InitializeResourceVariables()函數中,諸如:

  1. resource_tones=  
  2. resource_midis

小結:淺談MTK平臺用Socket實現HTTP請求過程的內容介紹完了,通過請求數據的案例來了解到了MTK平臺的內容,希望通過MTK平臺的應用內容的學習能對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-08-31 10:51:39

MTKAndroid 開發

2018-10-18 10:05:43

HTTP網絡協議TCP

2011-09-06 10:24:11

2011-08-30 16:32:41

MTK開發環境

2020-05-27 11:31:43

Python 開發程序員

2018-02-24 16:15:03

PythonHTTP

2017-04-24 14:39:01

PythonHTTP語言

2011-09-06 09:14:27

MTK平臺軟件

2011-09-05 17:35:18

MTK啟動過程RTOS

2009-07-06 16:20:50

JSP自定義標簽

2024-04-23 13:36:00

2009-07-28 15:29:03

實現HTTP請求ASP.NET

2011-08-30 16:22:00

MTK開發環境

2011-10-14 09:23:14

2010-06-29 13:24:26

HTTP協議

2023-07-28 14:32:33

QtPOST請求

2010-06-29 13:35:39

HTTP協議

2025-02-04 09:58:08

2024-01-02 09:19:15

kubernetes集群HTTP

2009-09-15 11:08:01

LinQ調用存儲過程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产观看 | av综合站| 日韩精品在线免费 | 亚洲香蕉 | 国产精品免费观看视频 | 日韩毛片在线视频 | 成年网站在线观看 | 亚洲人人| 亚洲精品一二区 | 性xxxxx| 999久久精品 | 九九热在线观看 | 日韩亚洲视频在线 | 日韩成人在线免费观看 | 国产一区二区三区免费观看在线 | 91最新在线视频 | 337p日韩| 成人免费在线播放 | 久久久久久久久久久久久9999 | 色婷婷综合久久久中文字幕 | 五月天天丁香婷婷在线中 | 午夜av免费 | 日韩不卡三区 | 欧美日韩久久久久 | 一级黄色av电影 | 亚洲欧美日韩精品久久亚洲区 | 久久久精品视频一区二区三区 | 久久精品免费一区二区 | 欧美成人a∨高清免费观看 老司机午夜性大片 | 91精品久久久久久久久中文字幕 | 日日干干 | 亚洲欧洲成人 | 伊人二区 | 日韩视频免费在线 | 欧美综合一区二区 | 国产欧美一区二区精品久导航 | 成人影| 91久久国产 | 国产一区二区在线免费观看 | 中文字幕视频在线观看 | 黑人久久 |