Samsung SM719 - отбрасывание пакетов IP-фрагментированного протокола - UDP - PullRequest
0 голосов
/ 20 февраля 2019

У меня возникла следующая проблема с моим новым Samsung Galaxy S2 с Android 7.0

У меня есть приложение, которое получает данные с устройства черного ящика через сокет UDP, данные, отправленные устройством черного ящика, большиеUDP-пакеты (MTU> 1500 байт), и этот конкретный планшет (Samsung Galaxy S2) сбрасывает ответные пакеты с устройства черного ящика

. Порядок работы моего приложения следующий:
1. Установите планшет иBlackbox в том же WLan
2. Подключитесь к порту 65000 через сокет UDP (Socked фиксируется черным ящиком)
3. Отправьте пакет дейтаграммы из приложения в черный ящик с содержимым «hallo» плюс возврат каретки.
4. Устройство черного ящика отправляет мне обратно 54 КБ в виде одного пакета UDP

, чтобы принять во внимание: в качестве полезной нагрузки данных UDP (blackbox-> tablet) больше, чем у кадра Ethernet (1480 байт), тогда сеть передает пакет в виде серии из 40 кадров фрагментированного IP-протокола

Странный thДело в том, что с другими телефонами пакет udp принимается в моем приложении без каких-либо проблем, и Samsung отбрасывает пакеты.Следующий код работает и был протестирован с другими телефонами.

    this.networkThreadHandler.post(new Runnable() {
        @Override
        public void run() {
            try {

                clientChannel = DatagramChannel.open();

                ByteBuffer buffer = ByteBuffer.wrap(messageBytes);
                InetSocketAddress serverAddress = new InetSocketAddress(address, port);

                ByteBuffer outputBuffer = ByteBuffer.allocate(6000000);

                //for(int i = 0; i<msgNumber; i++) {
                int bytesSent = clientChannel.send(buffer, serverAddress);
                Log.i(METHODTAG, "bytesSent: " + bytesSent);

                buffer.clear();
                clientChannel.receive(outputBuffer);
                outputBuffer.flip();

                int limits = outputBuffer.limit();
                byte bytes[] = new byte[limits];
                outputBuffer.get(bytes, 0, limits);
                String response = new String(bytes);
                Log.d(METHODTAG, "Server  responded: " + response);

                responseListener.onResponseReceived(response);

                //outputBuffer.clear();
                //outputBuffer = null;

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });   
  • Этот код корректно работает для других устройств Samsung и телефонов разных производителей и версий Android от 5.0 до 8.0 даже с другими телефонами Samsungс Android 7

Характеристики оборудования: Планшет
Модель: планшет Samsung Galaxy Tab S2, модель SM-T719N, 8 "- LTE, Quad-Core
Android: 7.0
ЯдроВерсия: 3.10.84
SE для Android Статус: принудительное выполнение
Версия Knox: 2.7.1

...