Проблема с трансляцией через DatagramSocket

У меня проблема с трансляцией пакетов датаграмм с одного телефона Android на другой.

Я настроил свое приложение так, чтобы оно могло использовать 2 разных сокета датаграмм. Это все работает хорошо, и я могу переключаться между сокетами просто отлично.

Для тестирования приложения я использую 2 телефона, а также приложение для ПК, способное связываться с моим приложением. Когда я пытаюсь транслировать пакеты датаграмм с одного из двух телефонов, приложение для ПК реагирует очень хорошо, но другой телефон не отвечает вообще. То же самое происходит, когда я пытаюсь сделать это с другим телефоном.

Но здесь есть одна загвоздка: всякий раз, когда я пытаюсь вещать из приложения на ПК, оба телефона отвечают. (???)

Оба устройства и приложение для ПК настроены на использование одного и того же широковещательного адреса для отправки. И все же не похоже, что телефон принимает трансляцию другого. Я подтвердил, что они получают отклик от трансляции во время трансляции, что, очевидно, правильно.

Методы, которые я использую для инициализации и обновления широковещательного сокета, указаны ниже.

private void initBroadcastSocket(Inet4Address address, int port){
    try {
        mBroadcastSocket = new DatagramSocket(port, address);
        mBroadcastSocket.setBroadcast(true);
        mBroadcastSocket.setSoTimeout(SOCKET_TIME_OUT);
    } catch (IOException ioe) {
        Log.e(TAG, "Exception occurred while initializing BroadcastSocket: " + ioe.toString());
    }
    if(mBroadcastSocket != null){
        Log.d(TAG, "BroadcastSocket initially set to " + mBroadcastSocket.getLocalAddress() +
                    ":" + mBroadcastSocket.getLocalPort());
    }
}

public synchronized void updateBroadcastSocket(Inet4Address address, int port){
    // Temporarily suspend the listening Thread.
    ...
    // If the socket is open, close it.
    if(mBroadcastSocket != null){
        mBroadcastSocket.close();
        mBroadcastSocket = null;
    }
    // Create new socket with the passed values.
    try {
        mBroadcastSocket = new DatagramSocket(port, address);
        mBroadcastSocket.setBroadcast(true);
        mBroadcastSocket.setSoTimeout(SOCKET_TIME_OUT);
    } catch (SocketException se) {
        Log.e(TAG, "Exception occured while updating BroadcastSocket: " + se.toString());
    }
    // Log new address and port.
    ...
    // Continue the listening Thread.
    ...
}

Если кто-то обнаружит изъян в моем коде, пожалуйста, уточните.

1 ответ

Решение

Проблема в том, что оба Android-устройства имеют одинаковый IP-адрес (как-то). Я пытаюсь исправить это сейчас.

Другие вопросы по тегам