2015-11-26 4 views
1

Целью следующего кода является отправка пакета датаграммы через WiFi из приложения Android в TI CC3200 Launchpad. В настоящее время у меня возникает проблема при установлении соединения с Launchpad. Я попытался протестировать процедуру с помощью ноутбука и приложения, но мой Wireshark не отображает никаких пакетов. Любые предложения, почему мой код не работает по назначению?Проблемы с подключением Java DatagramSocket через WiFi

BR

EDIT1:

IP-являются правильными. Я получаю: bind failed: EINVAL (Недопустимый аргумент).

Manifest:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> 
<uses-permission android:name="android.permission.INTERNET"></uses-permission> 

<uses-feature android:name="android.hardware.wifi.direct"/> 

EDIT2:

StackTrace:

. . .

I/AudioPolicyManager (287): getAudioPolicyConfig: audioParam; outDevice

В/AudioPolicyManager (287): getNewOutputDevice() выбранное устройство 0

В/AudioPolicyManager (287): ### curdevice: 2

I/AudioPolicyManager (287): getAudioPolicyConfig: audioParam; outDevice

В/AudioPolicyManager (287): getNewOutputDevice() выбранное устройство 0

V/AudioPolicyManager (287): ### curdevice: 2

D/CustomFrequencyManagerService (751): releaseDVFSLockLocked: Получение списка блокировок типа FRM: частоты DVFS_MIN_LIMIT: 2457600 UID: 1000 PID: 751 теги: ROTATION_BOOSTER @ 32

I/AudioPolicyManager (287): getAudioPolicyConfig: audioParam; outDevice

В/AudioPolicyManager (287): getNewOutputDevice() выбранное устройство 0

В/AudioPolicyManager (287): ### curdevice: 2

I/AudioPolicyManager (287): getAudioPolicyConfig: audioParam; outDevice

В/AudioPolicyManager (287): getNewOutputDevice() выбранное устройство 0

В/AudioPolicyManager (287): ### curdevice: 2

I/AudioPolicyManager (287): getAudioPolicyConfig: audioParam; outDevice

В/AudioPolicyManager (287): getNewOutputDevice() выбранное устройство 0

В/AudioPolicyManager (287): ### curdevice: 2

I/AudioPolicyManager (287): getAudioPolicyConfig: audioParam; outDevice

В/AudioPolicyManager (287): getNewOutputDevice() выбранное устройство 0

В/AudioPolicyManager (287): ### curdevice: 2

Д/StatusBar.NetworkController (1036): refreshViews подключены = {} WiFi уровень = 3 combinedSignalIconId = 0x7f020495/com.android.systemui: вытяжка/stat_sys_wifi_signal_4 mobileLabel = bob wifiLabel = "Kugelfahrzeug" xxxxXXXXxxxxXXXX emergencyOnly = false объединенныйLabel = "Kugelfahrzeug" xxxxXXXXxxxx ХХХЕ mAirplaneMode = ложно mDataActivity = 0 mPhoneSignalIconId = 0x7f020415/com.android.systemui: вытяжка/stat_sys_signal_3_auto_rotate mQSPhoneSignalIconId = 0x7f020113/com.android.systemui: вытяжка/ic_qs_signal_3 mDataDirectionIconId = 0x0/(нуль) mDataSignalIconId = 0x7f020415/com.android.systemui: вытяжка/stat_sys_signal_3_auto_rotate mDataTypeIconId = 0x7f0202ac/com.android.systemui: вытяжка/stat_sys_data_connected_3g mQSDataTypeIconId = 0x7f020114/com.android.systemui: вытяжка/ic_qs_signal_3g mNoSimIconId = 0x0/(нуль) mWifiIconId = 0x7f020495/com.android.systemui: вытяжка/stat_sys_wifi_signal_4 mQSWifiIconId = 0x7f02012b/com.android.systemui: вытяжка/ic_qs_wifi_4 mWifiActivityIconId = 0x7f020468/com.android.systemui: вытяжка/stat_sys_signal_no_inout mBluetoothTetherIconId = 0x1080907/Android: вытяжка/stat_sys_tether_bluetooth

Д/StatusBar.NetworkController (1036): refreshSignalCluster - setNWBoosterIndicators (ложь)

Д/StatusBar.NetworkController (1036): applyOpen

I/AudioPolicyManager (287): getAudioPolicyConfig: audioParam; outDevice

В/AudioPolicyManager (287): getNewOutputDevice() выбранное устройство 0

В/AudioPolicyManager (287): ### curdevice: 2

Д/StatusBar.NetworkController (+1036): refreshSignalCluster - setNWBoosterIndica TORs (ложный)

Д/StatusBar.NetworkController (1036): applyOpen

Д/StatusBar.NetworkController (1036): refreshSignalCluster - setNWBoosterIndicators (ложный)

Д/StatusBar.NetworkController (1036): applyOpen

Д/StatusBar.NetworkController (1036): refreshSignalCluster - setNWBoosterIndicators (ложь)

Д/StatusBar.NetworkController (1036): applyOpen

Д/TaskPersister (751): removeObsoleteFile: удаление файла = 24_task.xml

Д/TaskPersister (751): removeObsoleteFile: удаление файла = 24_task_thumbnail.png

I/AudioPolicyManager (287): getAudioPolicyConfig: audioParam; outDevice

В/AudioPolicyManager (287): getNewOutputDevice() выбранное устройство 0

В/AudioPolicyManager (287): ### curdevice: 2

I/art (751): Явная параллельная развертка метки GC освобождена 17486 (1092 КБ) Объекты AllocSpace, объекты (LOS), 5 (1360 КБ), 25% бесплатно, 45 МБ/61 МБ, приостановлено 1,720 м. Всего 181.936ms

I/AudioPolicyManager (287): getAudioPolicyConfig: audioParam; outDevice

В/AudioPolicyManager (287): getNewOutputDevice() выбранное устройство 0

В/AudioPolicyManager (287): ### curdevice: 2

I/AudioPolicyManager (287): getAudioPolicyConfig: audioParam; outDevice

В/AudioPolicyManager (287): getNewOutputDevice() выбранное устройство 0

В/AudioPolicyManager (287): ### curdevice: 2

I/AudioPolicyManager (287): getAudioPolicyConfig: audioParam; outDevice

В/AudioPolicyManager (287): getNewOutputDevice() выбранное устройство 0

В/AudioPolicyManager (287): ### curdevice: 2

I/AudioPolicyManager (287): getAudioPolicyConfig: audioParam; outDevice

В/AudioPolicyManager (287): г etNewOutputDevice() выбранное устройство 0

В/AudioPolicyManager (287): ### curdevice: 2

I/AudioPolicyManager (287): getAudioPolicyConfig: audioParam; outDevice

В/AudioPolicyManager (287): getNewOutputDevice() выбранное устройство 0

В/AudioPolicyManager (287): ### curdevice: 2

I/AudioPolicyManager (287): getAudioPolicyConfig: audioParam; outDevice

В/AudioPolicyManager (287): getNewOutputDevice() выбранное устройство 0

В/AudioPolicyManager (287): ### curdevice: 2

I/AudioPolicyManager (287): getAudioPolicyConfig: audioParam; outDevice

В/AudioPolicyManager (287): getNewOutputDevice() выбранное устройство 0

В/AudioPolicyManager (287): ### curdevice: 2

I/WifiStateMachine (75 1): CMD_RSSI_POLL: calculateWifiScore в!

I/AudioPolicyManager (287): getAudioPolicyConfig: audioParam; outDevice

В/AudioPolicyManager (287): getNewOutputDevice() выбранное устройство 0

В/AudioPolicyManager (287): ### curdevice: 2

I/WifiStateMachine (751): CMD_RSSI_POLL: calculateWifiScore out!

I/WifiStateMachine (751): CMD_RSSI_POLL: выход!

EDIT3:

Проблема была расположена на сетевом вызове в основной (фиксированный с

new Thread(new Runnable() 
{ 
    @Override 
    public void run() 
    { 
     (Code below) 
    } 
}); 

)

App теперь работает отлично!

Код:

public void runJavaSocket() throws IOException 
    { 
    try 
    { 
     DSocket = new DatagramSocket(null); 
     DSocket.bind(new InetSocketAddress("192.168.173.2", 4242)); 
     DSocket.connect(new InetSocketAddress("192.168.173.1", 4242)); 
     String send_x = Float.toString(round_x); 
     byte[] buffer = send_x.getBytes(); 
     byte [] IP = {(byte) 192,(byte) 168,(byte) 173, (byte) 1}; 
     InetAddress address = InetAddress.getByAddress(IP); 
     int serverSocket = 4242; 
     DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, serverSocket); 
     DSocket.send(packet); 
     DSocket.close();  
    } 
    catch (Exception e) 
    { 
     DSocket.close(); 
    } 

}

+2

вы не ловила каких-либо исключений ? вы просто едите его. Я предполагаю, что DSocket - это переменная класса? когда вы подключаетесь к DatagramSocket, вам не нужно указывать адрес и порт в пакете - он будет делать это автоматически. Распечатайте исключение, которое вы не проверяете и не сообщаете нам, что он говорит. Кроме того, вы уверены, что это IP-адреса вашего компьютера? где находится код конца прослушивания? ** Вы добавили разрешение INTERNET в манифест андроида? ** – WalterM

+0

Я обновляю вопрос с большим количеством данных о проблеме. – Peritisch

+0

Я считаю, что это проблема. удивленный, я пропустил это в первый раз. 'new DatagramSocket (новый InetSocketAddress (« 192.168.173.2 », 4242));' когда вы вызываете bind без аргументов, он автоматически привязывается к порту по умолчанию. Я считаю, что вы также можете вызвать 'new DatagramSocket (null);', чтобы сказать, чтобы он не связывался. – WalterM

ответ

0

Попробуйте этот код, и быть уверенным, что ваши два устройства работают на одной и той же сети:

 new Thread(new Runnable() { 
      @Override 
      public void run() { 
       DatagramSocket socket = null; 
       try { 
        socket = new DatagramSocket(); 
        InetAddress address = InetAddress.getByName("10.0.0.8"); 
        byte[] command = "Hello".getBytes("UTF-8"); 

        DatagramPacket sendPacket = new DatagramPacket(command, command.length, address, 8080); 
        socket.send(sendPacket); 
       } catch (SocketException e) { 
        e.printStackTrace(); 
       } catch (UnsupportedEncodingException e) { 
        e.printStackTrace(); 
       } catch (UnknownHostException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } finally { 
        if (socket != null) { 
         socket.disconnect(); 
         socket.close(); 
        } 
       } 
      } 
     }).start(); 
+0

Попробуйте, почему именно? NB broadcast = false - это состояние по умолчанию, и если сокет не подключен, бесполезно его отключать. И 'SocketException' никогда не следует игнорировать. – EJP

+0

Попробуйте - потому что мой фрагмент работает! :) –

+0

Спасибо за предложение, но приложение начинает сбой при использовании вашего кода. – Peritisch

Смежные вопросы