隨筆-348  評論-598  文章-0  trackbacks-0
          今天做黑莓平臺上J2ME的Socket測試程序,服務端已經調試好了,服務端也用模擬器調試好了,可到了黑莓上面就有問題了,程序運行正常,連接也正常建立,但發送出去的數據服務端就是收不到導致阻塞,服務端阻塞也導致了客戶端接收數據的阻塞。。。死活沒發現原因。。。最后測試來測試去才發現問題所在。
          之前的程序:
          SocketConnection conn = null;
                              OutputStream os 
          = null;
                              InputStream is 
          = null;
                              
          try {
                                  getUrl();
                                  
          if ("".equals(url.trim()) || "".equals(port)) {
                                      log(
          "請將Socket測試地址和端口填寫完整", Thread.currentThread());
                                      
          return;
                                  }

                                  
          try {
                                      Integer.parseInt(port);
                                  }
           catch (Exception e) {
                                      log(
          "端口號必須是整數", Thread.currentThread());
                                      
          return;
                                  }

                                  log(CONNECTING_STR, Thread.currentThread());
                                  conn 
          = (SocketConnection) Connector.open("socket://" + url + ":" + port, Connector.READ_WRITE, true);
                                  conn.setSocketOption(SocketConnection.LINGER, 
          5);

                                  
          // 發送和回復的請求
                                  os = conn.openDataOutputStream();
                                  is 
          = conn.openDataInputStream();
          修正之后的程序:
          SocketConnection conn = null;
                              DataOutputStream os 
          = null;
                              DataInputStream is 
          = null;
                              
          try {
                                  getUrl();
                                  
          if ("".equals(url.trim()) || "".equals(port)) {
                                      log(
          "請將Socket測試地址和端口填寫完整", Thread.currentThread());
                                      
          return;
                                  }

                                  
          try {
                                      Integer.parseInt(port);
                                  }
           catch (Exception e) {
                                      log(
          "端口號必須是整數", Thread.currentThread());
                                      
          return;
                                  }

                                  log(CONNECTING_STR, Thread.currentThread());
                                  conn 
          = (SocketConnection) Connector.open("socket://" + url + ":" + port, Connector.READ_WRITE, true);
                                  conn.setSocketOption(SocketConnection.LINGER, 
          5);

                                  
          // 發送和回復的請求
                                  os = conn.openDataOutputStream();
                                  is 
          = conn.openDataInputStream();
          看出來了嗎?
          os和is變量的聲明類型不一樣,如果用OutputStream和InputStream這一類的抽象類聲明只能調用標準讀寫接口,在J2ME模擬器上面沒有問題,但是到了黑莓上面死活都不行,后來用了具體實現類來聲明,調用了ReadUTF和WriteUTF來進行讀寫操作,就沒有任何問題了。

          ---------------------------------------------------------
          專注移動開發

          Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
          posted on 2010-01-10 22:16 TiGERTiAN 閱讀(1935) 評論(1)  編輯  收藏 所屬分類: JavaJ2MEBlackBerry

          評論:
          # re: BlackBerry讓我差點把電腦扔了。。。 2010-01-11 20:14 | javacool
          呵呵,編碼有時候會把人郁悶死,希望UTF-8早日一統江湖!  回復  更多評論
            
          主站蜘蛛池模板: 乐平市| 泊头市| 建平县| 沙洋县| 寿宁县| 乐业县| 石楼县| 花垣县| 迁西县| 驻马店市| 高平市| 当涂县| 廉江市| 道孚县| 区。| 油尖旺区| 沂源县| 清水县| 同德县| 屏东市| 江孜县| 永仁县| 富民县| 绿春县| 道孚县| 安达市| 盐山县| 华坪县| 龙泉市| 饶河县| 宁陕县| 镇平县| 广饶县| 盈江县| 土默特左旗| 依安县| 淄博市| 华阴市| 留坝县| 九龙县| 水城县|