Проблема с трансляцией через 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-адрес (как-то). Я пытаюсь исправить это сейчас.