java - 通过WiFi连接Java DatagramSocket的问题

标签 java android udp

以下代码的目的是通过WiFi从Android应用程序向TI CC3200 Launchpad发送数据报包。
建立与启动板的连接时,我目前遇到问题。我尝试使用笔记本电脑和应用程序测试该过程,但是我的Wireshark没有显示任何数据包。
有什么建议为什么我的代码无法正常工作?

BR

编辑1:

IP是正确的。
我收到:绑定失败:EINVAL(无效参数)。

表现:

 <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"/>


编辑2:

堆栈跟踪:





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

V / AudioPolicyManager(287):getNewOutputDevice()选择的设备0

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

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

V / 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

V / AudioPolicyManager(287):getNewOutputDevice()选择的设备0

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

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

V / AudioPolicyManager(287):getNewOutputDevice()选择的设备0

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

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

V / AudioPolicyManager(287):getNewOutputDevice()选择的设备0

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

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

V / AudioPolicyManager(287):getNewOutputDevice()选择的设备0

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

D / StatusBar.NetworkController(1036):刷新视图已连接= {wifi}级别= 3 CombinedSignalIconId = 0x7f020495 / com.android.systemui:drawable / stat_sys_wifi_signal_4 mobileLabel = bob wifiLabel =“ Kugelfahrzeug” xxxxXXXXugxxxxxXXXX EmergencyOnly = false CombinedLabel =“ K = false mDataActivity = 0 mPhoneSignalIconId = 0x7f020415 / com.android.systemui:drawable / stat_sys_signal_3_auto_rotate mQSPhoneSignalIconId = 0x7f020113 / com.android.systemui:drawable / ic_qs_signal_3 mDataDirectionIconId = 0x0 /(null).mDataSignalIconId = 0x0 /(null)。 stat_sys_signal_3_auto_rotate mDataTypeIconId = 0x7f0202ac / com.android.systemui:drawable / stat_sys_data_connected_3g mQSDataTypeIconId = 0x7f020114 / com.android.systemui:drawable / ic_qs_signal_3g mNoSimIconId = 0x0 / 7_sys_stat_wifi_snable_con_i_iableId = 0x0 /(n /com.android.systemui:drawable/ic_qs_wifi_4 mWifiActivityIconId = 0x7f020468 / com.android.systemui:drawable / s tat_sys_signal_no_inout mBluetoothTetherIconId = 0x1080907 / android:drawable / stat_sys_tether_bluetooth

D / StatusBar.NetworkController(1036):refreshSignalCluster-setNWBoosterIndicators(false)

D / StatusBar.NetworkController(1036):applyOpen

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

V / AudioPolicyManager(287):getNewOutputDevice()选择的设备0

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

D / StatusBar.NetworkController(1036):refreshSignalCluster-setNWBoosterIndicators(false)

D / StatusBar.NetworkController(1036):applyOpen

D / StatusBar.NetworkController(1036):refreshSignalCluster-setNWBoosterIndicators(false)

D / StatusBar.NetworkController(1036):applyOpen

D / StatusBar.NetworkController(1036):refreshSignalCluster-setNWBoosterIndicators(false)

D / StatusBar.NetworkController(1036):applyOpen

D / TaskPersister(751):removeObsoleteFile:删除file = 24_task.xml

D / TaskPersister(751):removeObsoleteFile:删除文件= 24_task_thumbnail.png

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

V / AudioPolicyManager(287):getNewOutputDevice()选择的设备0

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

I / art(751):显式并发标记清除GC已释放17486(1092KB)AllocSpace对象,5(1360KB)LOS对象,25%空闲,45MB / 61MB,已暂停1.720ms,总计181.936ms

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

V / AudioPolicyManager(287):getNewOutputDevice()选择的设备0

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

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

V / AudioPolicyManager(287):getNewOutputDevice()选择的设备0

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

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

V / AudioPolicyManager(287):getNewOutputDevice()选择的设备0

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

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

V / AudioPolicyManager(287):getNewOutputDevice()选择的设备0

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

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

V / AudioPolicyManager(287):getNewOutputDevice()选择的设备0

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

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

V / AudioPolicyManager(287):getNewOutputDevice()选择的设备0

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

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

V / AudioPolicyManager(287):getNewOutputDevice()选择的设备0

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

I / WifiStateMachine(751):CMD_RSSI_POLL:进入calculateWifiScore!

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

V / AudioPolicyManager(287):getNewOutputDevice()选择的设备0

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

I / WifiStateMachine(751):CMD_RSSI_POLL:计算出Wifi得分!

I / WifiStateMachine(751):CMD_RSSI_POLL:退出!

编辑3:

问题位于主网络呼叫中(已修复

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




应用程序现在可以正常运行了!

码:

    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();
    }


}

最佳答案

尝试使用此代码,并确保您的两个设备在同一网络上工作:

        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();

关于java - 通过WiFi连接Java DatagramSocket的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33945483/

相关文章:

java - 从外部存储 Android 读取图像/文件

android - 从Lollipop中的Google驱动器获取文件路径(MediaStore.MediaColumns.DATA == null)

c# - 使用 IPAddress.Any 获取客户端的 IP

java - StringBuffer 不附加数据 - 由于线程?

java - 使用 Ant 构建包含混合 Scala 和 Java 源文件的项目 - 非法循环引用错误

java - java中内部类放置的位置是正确的

php - 用php在android中使用websocket实现聊天

c++ - 将 QUdpSocket 用于自定义 FFMPEG I/O(原始 H.264)

java - JVM 崩溃 :fatal error has been detected by the Java Runtime Environment

java - 在 grizzly 上设置 websocket SSL