2014-11-24 98 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

相關問題