2009-07-22 10 views
3

MIDPのソケット作成にはいくつかの種類の制限があるようです。 私はサーバーへの接続をたくさんする必要があります(同時接続はありません)。また、アプリケーションのクラッシュを試してみてください。それはシミュレータと私の実際のデバイスでもクラッシュします。第13回の試行でソケットがmidpに限定されていますか?

try { 
     StreamConnection c; 
     StringBuffer sb = new StringBuffer(); 
     c = (StreamConnection) Connector.open(
      "http://www.cnn.com.br/", Connector.READ_WRITE); 
     InputStreamReader r = new InputStreamReader(c.openInputStream(), "UTF-8"); 
     System.out.println(r.read()); 
     c.close(); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 

このコードがクラッシュ:それは私のコードに影響されることの可能性を単離するために

は、私は次のコードを単離しました。

私はwhileループの中に10秒のスリープを追加しようとしましたが、13回目にもクラッシュします。

クラッシュメッセージは次のとおりです。

java.io.IOException: Resource limit exceeded for TCP client sockets 
- com.sun.midp.io.j2me.socket.Protocol.open0(), bci=0 
- com.sun.midp.io.j2me.socket.Protocol.connect(), bci=124 
- com.sun.midp.io.j2me.socket.Protocol.open(), bci=125 

答えて

7

c.closeながら()のtry内では、あなたがこれをトリガしている他の問題がある場合、私は疑問に思って、十分なはずです。コードは本当に最後に接続と入力ストリームを閉じている必要があります。

StreamConnection c = null; 
InputStream is = null; 
try { 
    StringBuffer sb = new StringBuffer(); 
    c = (StreamConnection) Connector.open(
     "http://www.cnn.com.br/", Connector.READ_WRITE); 
    is = c.openInputStream(); 
    InputStreamReader r = new InputStreamReader(is, "UTF-8"); 
    System.out.println(r.read()); 
} catch (IOException ex) { 
    ex.printStackTrace(); 
} finally { 
    if (is != null) { 
    try { 
     is.close(); 
    } catch (Exception ex) { 
     System.out.println("Failed to close is!"); 
    } 
    } 
    if (c != null) { 
    try { 
     c.close(); 
    } catch (Exception ex) { 
     System.out.println("Failed to close conn!"); 
    } 
    } 
} 
0

なぜ、c.close()が実際に終了しなかったのかは、入力ストリームが閉じられなかったためです。一部のデバイスでは、ストリームと接続の両方を閉じる必要があります。また、close()メソッドが呼び出されたときに、一部のデバイスで接続がすぐに終了することはありません。あなたはgcもやらなければならないかもしれません。

関連する問題