ポート3001で、LAN経由で5秒ごとにパケットをブロードキャストするC言語で記述されたUDPサーバーがあります。
ポート 3001 (AsyncTask スレッド内) でリッスンしている Android アプリケーションを UDP クライアントとして作成しています。これは receive() メソッドまで実行されていますが、このポートでデータが検出されないようです。
これが私のコードです:
private class ConnectionTask extends AsyncTask<Void, Integer, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... arg0) {
String receivedString = "";
byte[] receiveData = new byte[1024];
DatagramSocket clientSocket;
try {
while(true){
clientSocket = new DatagramSocket(5000);
DatagramPacket receivePacket = new DatagramPacket(receiveData,
receiveData.length);
clientSocket.receive(receivePacket);
receivedString = new String(receivePacket.getData());
}
} catch (SocketException e) {
Log.v("SocketExceptionOccured", e.toString());
e.printStackTrace();
//clientSocket.close();
} catch (IOException e) {
Log.v("IOExceptionOccured", e.toString());
e.printStackTrace();
//clientSocket.close();
}
Toast.makeText(getBaseContext(), receivedString, Toast.LENGTH_LONG)
.show();
return null;
}
}
USBケーブルを使用して、デバッグ用に自分のデバイスでコードをテストします。
コンピューターで実行されている単純な UDP クライアント (C) でサーバーをテストしましたが、通信は問題ありません。
このコードが機能しない理由がわかりません。誰かアイデアはありますか?
ありがとう、