サーバーに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」が発生しました