2014-11-24 158 views
1

我想从我的android发送一些数据通过WiFi连接到外部传感器。虽然我能够通过UDP连接将数据从传感器发送到android,但我无法做到相反。其中数据被发送的代码下面的一个:通过UDP发送数据从android到外部传感器

public void onClick(View v) { 
      Thread t = new Thread(){ 
       @Override 
       public void run(){ 
        while(true){ 
         int server_port = 12345; 
         byte[] message = "1".getBytes(); 
         System.out.println(message.toString()); 
         try { 
          InetAddress local = InetAddress.getByName("255.255.255.255"); 
          DatagramPacket p = new DatagramPacket(message,message.length,local,server_port); 
          DatagramSocket s = new DatagramSocket(); 

          s.send(p); 
          s.close(); 
         } catch (IOException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
        } 
       } 
      }; 
      t.start(); 
     } 

正如你可以在上面看到,一个按钮的OnClick,我希望应用程序通过UDP发送数据。问题是,当我尝试这样做时,发生此错误:

11-24 16:10:13.335: W/System.err(8077): java.net.SocketException: sendto failed: ENETUNREACH (Network is unreachable) 
11-24 16:10:13.335: W/System.err(8077): at libcore.io.IoBridge.maybeThrowAfterSendto(IoBridge.java:506) 
11-24 16:10:13.335: W/System.err(8077):at libcore.io.IoBridge.sendto(IoBridge.java:475) 
11-24 16:10:13.335: W/System.err(8077):at java.net.PlainDatagramSocketImpl.send(PlainDatagramSocketImpl.java:182) 
11-24 16:10:13.335: W/System.err(8077):  at java.net.DatagramSocket.send(DatagramSocket.java:284) 
11-24 16:10:13.343: W/System.err(8077):  at com.example.waspmoteagriculture.MainActivity$3$1.run(MainActivity.java:97) 
11-24 16:10:13.343: W/System.err(8077): Caused by: libcore.io.ErrnoException: sendto failed: ENETUNREACH (Network is unreachable) 
11-24 16:10:13.343: W/System.err(8077):  at libcore.io.Posix.sendtoBytes(Native Method) 
11-24 16:10:13.343: W/System.err(8077):  at libcore.io.Posix.sendto(Posix.java:151) 
11-24 16:10:13.343: W/System.err(8077):  at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:177) 
11-24 16:10:13.343: W/System.err(8077):  at libcore.io.IoBridge.sendto(IoBridge.java:473) 
11-24 16:10:13.343: W/System.err(8077):  ... 3 more 

我已经包含网络权限。另外我应该提到,传感器连接到android的wifi热点,以便将信息发送到手机。我不知道这样接收数据是否有问题。

是否有任何问题的代码或是这个错误有关的不同?先谢谢你。

回答

0

我以某种方式解决了这个问题。看起来广播地址255.255.255.255无效,因此无法找到当前连接的网络(这也解释了网络不可达问题)。为了发送数据,我使用了传感器的IP地址(通过收到的包使用System.out.println(packet.getAddress().toString());发现它。所以,为了发送数据广播,我想(还没有测试过)广播地址当前网络应该被使用

-1

可能您需要设置访问网络的权限。将以下行添加到AndroidManifest.xml中

<uses-permission android:name="android.permission.INTERNET"/> 

如果它不起作用,那么您需要对代码进行一些更改。 Read more here: https://code.google.com/p/boxeeremote/wiki/AndroidUDP

+0

我已经包含了访问网络的权限,即使在链接中使用代码后,我仍然得到相同的错误,可能是传感器(客户端)接收数据包还是连接已正确建立? – 2014-11-25 08:17:42

+0

我还应该提到传感器已连接到android的wifi热点。不知道是否有问题... – 2014-11-25 08:50:08

相关问题