隨筆-348  評論-598  文章-0  trackbacks-0
          今天做黑莓平臺上J2ME的Socket測試程序,服務(wù)端已經(jīng)調(diào)試好了,服務(wù)端也用模擬器調(diào)試好了,可到了黑莓上面就有問題了,程序運(yùn)行正常,連接也正常建立,但發(fā)送出去的數(shù)據(jù)服務(wù)端就是收不到導(dǎo)致阻塞,服務(wù)端阻塞也導(dǎo)致了客戶端接收數(shù)據(jù)的阻塞。。。死活沒發(fā)現(xiàn)原因。。。最后測試來測試去才發(fā)現(xiàn)問題所在。
          之前的程序:
          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(
          "端口號必須是整數(shù)", Thread.currentThread());
                                      
          return;
                                  }

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

                                  
          // 發(fā)送和回復(fù)的請求
                                  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(
          "端口號必須是整數(shù)", Thread.currentThread());
                                      
          return;
                                  }

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

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

          ---------------------------------------------------------
          專注移動開發(fā)

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

          評論:
          # re: BlackBerry讓我差點(diǎn)把電腦扔了。。。 2010-01-11 20:14 | javacool
          呵呵,編碼有時候會把人郁悶死,希望UTF-8早日一統(tǒng)江湖!  回復(fù)  更多評論
            
          主站蜘蛛池模板: 娱乐| 民乐县| 开化县| 昌黎县| 治多县| 汉源县| 田东县| 西盟| 卢氏县| 石狮市| 盐源县| 平度市| 泸定县| 仁布县| 关岭| 外汇| 图们市| 河曲县| 长子县| 历史| 湄潭县| 大邑县| 儋州市| 中方县| 延寿县| 凤山市| 雷波县| 巴林右旗| 枣强县| 淮阳县| 苍山县| 鄂托克旗| 岐山县| 石台县| 周至县| 沽源县| 明光市| 洪湖市| 嘉峪关市| 泰来县| 大埔县|