首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

Nokia N6600 實機 HTTP 請求報 -5120 錯誤排查紀實

     編輯:J2ME

現象

模擬器運行正常,真機 (N6600, Symbian OS) 執行 HttpConnection POST 請求時拋出 Symbian OS error = -5120。

代碼片段

public static String getHTTPInfo() {
    HttpConnection hc = null;
    DataInputStream dis = null;
    StringBuffer sb = new StringBuffer();
    try {
        hc = (HttpConnection) Connector.open("https://www.google.cn/");
        hc.setRequestMethod(HttpConnection.POST);
        hc.setRequestProperty("If-Modified-Since", "29 Oct 1999 19:43:31 GMT");
        hc.setRequestProperty("User-Agent", "Profile/MIDP-2.0 Configuration/CLDC-1.0");

        int rc = hc.getResponseCode();
        if (rc != HttpConnection.HTTP_OK)
            return "網絡故障,錯誤碼:" + rc;

        dis = new DataInputStream(hc.openDataInputStream());
        int ch, count = 0;
        while ((ch = dis.read()) != -1 && count++ < 50)
            sb.append((char)ch);
        return toGb(sb.toString()); // 假設轉 GB 碼
    } catch (Exception e) {
        return "錯誤:" + e.getMessage();
    } finally {
        closeQuietly(dis); closeQuietly(hc);
    }
}

錯誤碼對照

錯誤碼含義
-5120KErrInUse / 端口衝突、協議棧忙碌
-44KErrNotSupported / 不支援的協議或參數
-18KErrNoMemory / 記憶體不足

常見成因與對策

  1. APN/接入點未正確選擇:N6600 需在 MIDlet 屬性或系統設定中指定 APN,否則預設使用 WAP 閘道導致協議不匹配。
    → 在 JAD 增加 MIDlet-Connection-UID 或讓用戶手動選擇接入點。
  2. POST 請求無 Content-Length:部分 WAP 閘道要求 POST 必須帶 Content-Length。
    → 寫入資料前先 hc.setRequestProperty("Content-Length", String.valueOf(body.length))。
  3. User-Agent 被閘道攔截:嘗試移除或改為標準手機 UA。
  4. HTTPS/重定向不支援:N6600 早期固件不支援 HTTPS,且對 302 重定向處理有缺陷。
    → 強制使用 HTTP,避免重定向鏈。
  5. 並發連接數超限:Symbian 限制同一 MIDlet 同時最多 2~3 個 HTTP 連線。
    → 確保前一請求 close() 後再發起新請求。

最佳實踐模板

HttpConnection hc = null;
try {
    hc = (HttpConnection) Connector.open(url, Connector.READ_WRITE, true);
    hc.setRequestMethod(HttpConnection.GET); // 簡單查詢優先 GET
    hc.setRequestProperty("Connection", "close"); // 避免 Keep-Alive 導致閘道超時
    int rc = hc.getResponseCode();
    if (rc == HttpConnection.HTTP_OK) {
        try (InputStream is = hc.openInputStream()) {
            // 讀取邏輯...
        }
    }
} finally {
    if (hc != null) try { hc.close(); } catch (IOException ignored) {}
}

結語

-5120 多為「協議棧資源佔用」或「WAP 閘道協商失敗」。優先檢查 APN、簡化請求頭、改用 GET、確保串行化連接管理,多數情況可解決。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved