0

Android タブレットで UDP クライアントを構築しようとしています。アプリケーションはソケットを正常に作成できますが、送信しようとすると:

public void SendMessage( String message )
    {
        sendBuffer = message.getBytes();

        packet = new DatagramPacket( sendBuffer, sendBuffer.length, address, 4445 );
        //packet = new DatagramPacket( sendBuffer, sendBuffer.length, address, port );

        try 
        {
            socket.send( packet );
        } 
        catch (IOException ioe) 
        {
            Log.d( "NETWORK", "Failed to send UDP packet due to IOException: " + ioe.getMessage() );
            ioe.printStackTrace();
        }
        catch( Exception e )
        {
            Log.d( "NETWORK", "Failed to send UDP packet due to Exeption: " + e.getMessage() );
            e.printStackTrace();
        }
    }

Eclipse は「ソースが見つかりません」という新しいウィンドウを表示し、これを LogCat に出力しました。

android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:175)
at ...

使用しているポートがブロックされているか、何かが UDP 接続をブロックしている可能性があるのではないかと考えています (多くの異なるポートを試しても同じ結果が得られたためです)。LogCat (BlockGuardOS) が一部の入出力をブロックしていることを示している可能性があるため、私はこれを求めています

これは、実際の初期化は次のとおりです。

public ClientSocketThread( String address, int port )
    {       
        this.port = port;

        try 
        {
            this.address = InetAddress.getByName( address );
            Log.d( "NETWORK", "Address successfully resolved" );
        } 
        catch( UnknownHostException ue ) 
        {
            ue.printStackTrace();
            Log.d( "NETWORK", "Failed to resolve ip address due to UnknownException: " + ue.getMessage() );
        }

        try 
        {
            this.socket = new DatagramSocket();
            Log.d( "NETWORK", "UDP Socket successfully created" );
        } 
        catch( SocketException se ) 
        {
            Log.d( "NETWORK", "Failed to create socket due to SocketException: " + se.getMessage() );
            se.printStackTrace();
        }
    }
4

1 に答える 1

6
android.os.NetworkOnMainThreadException

メイン (UI) スレッドからネットワーキングを行うことはできなくなりました。ドキュメントでは常に警告されていましたが、現在は積極的にトラップされています。

このトピックは、SO やその他の情報源で何度も取り上げられています。

于 2012-05-15T15:51:53.817 に答える