1

サーバーにUDPパケットを送信して、オンラインかどうかを確認しようとしています。私はそれを正確に行うためにスタンドアロンアプリを作成しましたが、問題なく動作しますが、アプリにコードを入れて関数を呼び出すと、実際にパケットを送信するときに例外がスローされます。私はたくさんの研究をしましたが、その理由はわかりません。実際のIPを投稿したくないので、IPを偽のIPに置き換えました。高度なヘルプをありがとう。

import java.io.IOException;
import java.net.*;

import android.app.Activity;

public class CheckStatus extends Activity {
//Check if the server is online

public static boolean check() {

    try {
        byte[] receiveData = new byte[1024];
        InetAddress address = InetAddress.getByName("11.11.11.11");
        //create socket
        DatagramSocket clientSocket = new DatagramSocket();
        //set timeout
        clientSocket.setSoTimeout(1000);
        //send packet

        DatagramPacket p = new DatagramPacket(Integer.toBinaryString(0x0006000000).getBytes(), 5, address, 44462);

        clientSocket.send(p);//throws exception here

        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
        clientSocket.receive(receivePacket);
        clientSocket.close();
        return true;
    } catch (Exception e) {
        return false;
    }
}

}

例外を出力すると、「android.os.NetworkOnMainThreadException」が発生しました

4

1 に答える 1

2

asyncTaskでこれを宣言し、そこからメソッドactivityを呼び出します。check()

編集:

private class CheckStatusTask extends AsyncTask<Object, Object, Boolean> {        
    protected Boolean doInBackground(Object... arg0) {
        boolean flag = check();
        return flag;
    }

    protected void onPostExecute(Boolean flag) {
       // use your flag here to check true/false.
    }       
}

そして、この電話をかけます:

new CheckStatusTask().execute();

参照 :

痛みのない糸脱毛

于 2013-01-21T23:59:00.803 に答える