2011-08-20 16 views
1

我正在使用JXA的BB的XMPP客戶端上工作,但JXA api需要時間從輸入流中讀取,並在2分鐘後通過超時錯誤。我在J2ME中編寫了獨立的套接字程序,並在BB模擬器中執行,它可以交換XML,但輸入流不會從while循環中退出,在讀取時掛起。請看下面的代碼..j2me(BB)中的套接字輸入流問題

class SocketThread extends Thread 
{ 
    public void run() 
    { 

      ConnectionFactory connFact = new ConnectionFactory(); 
      ConnectionDescriptor connDesc; 
      connDesc = connFact.getConnection("socket://xxxxxx.p1.im:5222"); 
      if (connDesc != null) 
      { 
       SocketConnection httpConn; 
       httpConn = (SocketConnection)connDesc.getConnection(); 
       try 
       { 
       InputStream is = httpConn.openInputStream(); 
       OutputStream os = httpConn.openOutputStream(); 

       String a = "<?xml version=\"1.0\"?><stream:stream to=\"xxxxx.p1.im\" xml:lang=\"en\" xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" version=\"1.0\">"; 

       os.write(a.getBytes()); 

       byte[] b = new byte[1024]; 
       int len =0; 
          while ((len = is.read(b)) > 0) { 


           String str = new String(b); 

           System.out.println("Server n: " + str); 


           } 

        UiApplication.getUiApplication().invokeLater(new Runnable() 
        { 
         public void run() 
         { 
          Dialog.alert("got response xml stream..: " 
             ); 
         } 
        }); 
       } 
       catch (IOException e) 
       { 
       System.err.println("Caught IOException: " 
         + e.getMessage()); 
       } 
      } 
    } 
} 

上述程序不出來的循環,除非直到timesout,請幫我解決這個問題向前推進。

在此先感謝。

回答

1

讀取超時意味着沒有數據在超時期限內到達。沒有其他的。

但是,您的代碼在其他方面是錯誤的:假設讀取填充了緩衝區,並且在構造字符串時忽略了'len'的正值,所以您傳遞自己的垃圾。

+0

那麼上面的代碼能夠從XMPP服務器接收xml流後,閱讀兩個完整的XML流仍然掛着,它不退出,這是我的問題。 – Balaji

+0

「您的代碼在其他方面有誤」 - 要添加到此 - 流應始終在使用後關閉。在你的情況下,放置結束碼的最佳位置是'finally'塊(現在不存在)。 –

+0

好傢伙,解決了BB中的問題,在套接字URL「deviceside = true」參數結束時必須通知檢查了演示應用程序,並得到了thnx的幫助。 – Balaji