У меня есть следующий код, чтобы принимать пакеты UDP:сервер Android UDP не получает пакеты
public class AsyncReceiveUdp2 extends AsyncTask<String, Void, Boolean> {
@Override
protected Boolean doInBackground(String... f_url) {
int udp=111;
byte[] packet = new byte[2000];
DatagramPacket dp = new DatagramPacket(packet, packet.length);
DatagramSocket ds = null;
try {
ds = new DatagramSocket(udp);
ds.receive(dp);
//...
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ds != null) {
ds.close();
}
}
return null;
}
}
я отправить UDP данные на компьютер с Android устройства. Компьютер немедленно отправляет ответ как пакет UDP. Я сохраняю информацию в своем файле журнала на SD. И я вижу, что мое приложение остается на линии «ds.receive (dp)»; и не запускается после него. Я протестировал Android-устройство против программы на компьютере. Как я понимаю, сложно получить UDP-пакеты в эмуляторе. Я не мог этого сделать. Перенаправление не работает для меня, как описано here
Еще одна важная проблема - получить все пакеты, отправленные на устройство. Lossless. Как изменить код для этого?
Пожалуйста, помогите! Благодаря!
UDP не является протоколом без потерь, с помощью TCP .. он проверяет, был ли принят пакет, а также его целостность с 32-битной CRC –
протокол, который я работаю с является UDP протокол. Нет шансов на выбор. Благодарю. – Niaz
Хорошо, но вы не можете быть уверены, что пакет будет получен. В этом разница между UDP и TCP. UDP быстрее, потому что вы не проверяете, был ли получен пакет. TCP обрабатывает, в том числе, когда неверно сформирован пакет (ошибка CRC) –