8

私はAndroid用のモバイルアプリケーションを開発しています。そこで、ソケットを作成し、AndroidモバイルとWindowsアプリケーション(PC、ラップトップで実行)の間でデータを転送します。私はアンドロイド2.3を使用しています

モバイルサムスンギャラクシーポップ のテスト
PCとモバイルはUSBタイザリングを介して接続されています。
データは正しく転送されます。
しかし、1つの問題は、アプリケーションの途中で、モバイルUSBカプセルをシステムから抜くことによってタイタリングがキャンセルされ、例外がスローされることです。

ただし、例外が発生しない場合もあります。ソケットも閉じられていないため、データの読み取りを待機し
ます。Androidでデフォルトのソケットタイムアウト時間を送信してください。


私のサンプルコードを以下に示します

    Socket socket=null;
    DataOutputStream dos=null;
    OutputStream os=null;
    InputStream is=null;
    DataInputStream dis=null;

    try
    {
        Log.i(tagName, "b4 creating socket");
        socket=new Socket(this.getIpAddress(),this.getPort_number());                   
        is=socket.getInputStream();             
        dos=new DataOutputStream(os);       
        dis=new DataInputStream(is);            
    }
    catch(UnknownHostException unknown_ex)
    {
        Log.i(tagName, "Exception host unknown : "+unknown_ex.toString());
        unknown_ex.printStackTrace();           
    }
    catch(IOException ioe_ex)
    {
        Log.i(tagName, "ioe Exception : "+ioe_ex.toString());           
        ioe_ex.printStackTrace();           
    }
    catch(Exception ex)
    {
        Log.i(tagName, "Exception : "+ex.toString());       
        ex.printStackTrace();       
    }

    if(dos!=null)
    {
        try
        {
            dos.close();
        }
        catch(Exception ex)
        {

        }
    }

    if(dis!=null)
    {
        try
        {
            dis.close();
        }
        catch(Exception ex){}
    }
    if(socket!=null)
    {
        try
        {
            socket.close();
        }
        catch(Exception ex)
        {

        }
    }

    socket=null;dos=null;dis=null;      
    Log.i(tagName, "MySocketConnection.connectMe() - end");


コードを使うとき

Socket.getSoTimeout()


次に、0を返します。


みなさんのアイデアをお願いします。

4

2 に答える 2

5

Javadocで「ゼロのタイムアウトは無限のタイムアウトとして解釈される」と述べられているように、デフォルトのソケット読み取りタイムアウトは無限大です。有限値が必要な場合は、Socket.setSoTimeout().

于 2012-08-26T07:59:33.260 に答える
0

デフォルトのタイムアウトの使用法はわかりませんがthis.socket.setSoTimeout(5000);、より高いタイムアウト値を設定してみてください。ここで5000ミリ秒は5秒を意味します。これで問題が解決することを願っています。

于 2012-08-26T07:31:28.763 に答える