j2me http聯網客戶端編寫之二

 接收和發送大量數據

     受限於手機的連網性能,我們無法實現一次性的發送大量數據(如圖片的發送和接收),因此必須實現數據的分段接收和發送.

例子:

   客戶端採用http,服務器用php編寫

   1.接收數據

    涉及到服務器和客戶端的編碼方式問題,若只傳送字節流,不做任何的編解碼操作,則可有效的避免這一問題.一次接收數據的流程:

    客戶端發送讀取數據請求-->服務器返回數據的段數-->客戶端讀取第一段-->客戶端讀取第二段......-->讀取完成,客戶端處理數據.

    2.發送數據

發送數據的流程正好跟接收數據相反.

發送數據時採用post,模擬pc上上傳文件的方法

一次發送代碼

 

  HttpConnection hc = null;
  InputStream is = null;
  String agent = "Profile/MIDP-1.0 Configuration/CLDC-1.0";
  String   type = "multipart/form-data;" + "boundary=" + BOUNDARY;  //模擬form 發送

  byte result[] = null;
  try {
    hc = (HttpConnection) Connector.open(url);
    hc.setRequestMethod(HttpConnection.POST);
    hc.setRequestProperty("User-Agent", agent);
    hc.setRequestProperty("Content-Type", type);
    hc.setRequestProperty("Content-Length", new Integer(rawData.length()).toString());
    OutputStream os = hc.openOutputStream();
    os.write(rawData.getBytes());
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
   is = hc.openDataInputStream();
   int ch;
   while ((ch = is.read()) != -1) {
    baos.write(ch);
   }
   result = baos.toByteArray();
   baos.close();
  } catch (Exception e) {
   e.printStackTrace();
   result = null;
   throw e;
  } finally {
   try {
    if (is != null) {
     is.close();
     is = null;
    }
    if (hc != null) {
     hc.close();
     hc = null;
    }
   } catch (Exception e) {
    e.printStackTrace();
    result = null;
    throw e;
   }
  }
  return result;

rawdata 爲發送的數據,其組成方式爲

分隔符號

項目

分隔符號

項目

分隔符號

.

.

.

.

分隔符號可隨機生成,每一項用分隔符號分隔,用戶可任意向裏面添加項目.

--7d4a6d158c9

Content-Disposition: form-data; name="offset" //此次傳送的數據在整個文件中的下標

 

6144

--7d4a6d158c9

Content-Disposition: form-data; name="length"//此次傳送的數據長度

 

444

--7d4a6d158c9

Content-Disposition: form-data; name="total"   //總的數據長度

 

6588

--7d4a6d158c9

Content-Disposition: form-data; name="format"

 

jpg

--7d4a6d158c9

Content-Disposition: form-data; name="file"; filename="camare.jpg"   //文件名可任意寫

 

鯻q}魁碩08]t刊檍?x凗侜W??     //發送的數據段

--7d4a6d158c9--

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章