2013-03-29 56 views
0

我想設置我的android設備和wiFly(RN-171)模塊之間的通信。我在android設備上創建一個ad-hoc網絡並將wiFly連接到網絡。 wiFly配置爲在169.254.1.1:2000上收聽。我在應用程序中創建套接字來與wiFly進行通信。代碼:連接錯誤,同時通信到wiFly

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.net.Socket; 
import java.net.UnknownHostException; 
import android.os.Bundle; 
import android.os.StrictMode; 
import android.app.Activity; 
import android.view.Menu; 

public class MainActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() 
      .permitAll().build(); 
    StrictMode.setThreadPolicy(policy); 

     Socket echoSocket = null; 
     PrintWriter out = null; 
     BufferedReader in = null; 

     try { 
      echoSocket = new Socket("169.254.1.1", 2000); 
      out = new PrintWriter(echoSocket.getOutputStream(), true); 
      in = new BufferedReader(new InputStreamReader(
            echoSocket.getInputStream())); 
     } catch (UnknownHostException e) { 
      System.err.println("Don't know about host: wiFly."); 
      System.exit(1); 
     } catch (IOException e) { 
      System.err.println("Couldn't get I/O for " 
          + "the connection to: wiFly."); 
     } 

    BufferedReader stdIn = new BufferedReader(
           new InputStreamReader(System.in)); 
    String userInput; 
    while ((userInput = stdIn.readLine()) != null) { 
     out.println(userInput); 
     System.out.println("echo: " + in.readLine()); 
    } 
     out.close(); 
    in.close(); 
    stdIn.close(); 
    echoSocket.close(); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 
} 

對不起,使用StrictMode。一旦運行,將切換到AsyncTask。 以下是警告消息:

03-29 21:55:40.352: W/AdHoc(15118): failed to connect to /169.254.1.1 (port 2000): connect failed: ENETUNREACH (Network is unreachable) 
03-29 21:55:40.352: W/System.err(15118): java.net.ConnectException: failed to connect to /169.254.1.1 (port 2000): connect failed: ENETUNREACH (Network is unreachable) 
03-29 21:55:40.362: W/System.err(15118): at libcore.io.IoBridge.connect(IoBridge.java:114) 
03-29 21:55:40.362: W/System.err(15118): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 
03-29 21:55:40.362: W/System.err(15118): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) 
03-29 21:55:40.362: W/System.err(15118): at java.net.Socket.startupSocket(Socket.java:566) 
03-29 21:55:40.362: W/System.err(15118): at java.net.Socket.tryAllAddresses(Socket.java:127) 
03-29 21:55:40.362: W/System.err(15118): at java.net.Socket.<init>(Socket.java:177) 
03-29 21:55:40.362: W/System.err(15118): at java.net.Socket.<init>(Socket.java:149) 
03-29 21:55:40.362: W/System.err(15118): at com.example.udp.MainActivity.onCreate(MainActivity.java:33) 
03-29 21:55:40.362: W/System.err(15118): at android.app.Activity.performCreate(Activity.java:4492) 
03-29 21:55:40.362: W/System.err(15118): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
03-29 21:55:40.362: W/System.err(15118): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
03-29 21:55:40.362: W/System.err(15118): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
03-29 21:55:40.372: W/System.err(15118): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
03-29 21:55:40.372: W/System.err(15118): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
03-29 21:55:40.372: W/System.err(15118): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-29 21:55:40.372: W/System.err(15118): at android.os.Looper.loop(Looper.java:137) 
03-29 21:55:40.372: W/System.err(15118): at android.app.ActivityThread.main(ActivityThread.java:4424) 
03-29 21:55:40.372: W/System.err(15118): at java.lang.reflect.Method.invokeNative(Native Method) 
03-29 21:55:40.372: W/System.err(15118): at java.lang.reflect.Method.invoke(Method.java:511) 
03-29 21:55:40.382: W/System.err(15118): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
03-29 21:55:40.382: W/System.err(15118): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
03-29 21:55:40.382: W/System.err(15118): at dalvik.system.NativeStart.main(Native Method) 
03-29 21:55:40.382: W/System.err(15118): Caused by: libcore.io.ErrnoException: connect failed: ENETUNREACH (Network is unreachable) 
03-29 21:55:40.382: W/System.err(15118): at libcore.io.Posix.connect(Native Method) 
03-29 21:55:40.382: W/System.err(15118): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85) 
03-29 21:55:40.382: W/System.err(15118): at libcore.io.IoBridge.connectErrno(IoBridge.java:127) 
03-29 21:55:40.382: W/System.err(15118): at libcore.io.IoBridge.connect(IoBridge.java:112) 
03-29 21:55:40.382: W/System.err(15118): ... 21 more 
03-29 21:55:40.392: W/System.err(15118): Couldn't get I/O for the connection to: wiFly. 

我在Android 4.0.4運行它,並已列入清單文件所需的所有必要的許可。

+1

你能發佈實際的IOException e消息嗎?您的PrintWriter或BufferedReader行可能發生異常,並且它實際上正在連接。 – spartacus

+0

@spartacus它的警告,所以不會有更多的細節。無論如何,編輯。 :) – Andro

+0

這似乎仍然是您打印出來的錯誤。我想看到的是像這樣的IOException錯誤e.getMessage() – spartacus

回答

0

你的手機有什麼IP地址?

你需要配置你的手機在與wifly模塊相同的範圍內有一個ip地址,或者讓wifly通過它的dhcp服務器給你一個ip。

如果您還沒有將固件升級到v4,那麼您應該首先執行此操作,它可以解決一些問題,但與v2固件相比有一個明顯的優勢 - 它創建一個軟AP,您的設備可以連接到默認情況下,給你的手機一個IP地址。然後,您將能夠連接到幾個問題。

Roving networks upgrade info

的軟AP模式運行wifly一個側面說明得到的1.2.3.4的IP地址 - 不知道他們爲什麼選擇了:/

0

不能爲任何設備使用1.2.3.4 。 1.2.3.4是一個真實世界的IP地址,在澳大利亞。任何創建默認IP地址爲1.2.3.4的設備的工程師都是白癡。你不能隨便選擇一個數字作爲IP地址;這不是它的工作原理。

我的WiFly RN-171XV文檔告訴我,在升級到v4.40固件和出廠重置後,置於硬件AP模式下的設備的默認IP地址爲1.2.3.4,但不會在此處作出響應地址,並且DHCP服務器不響應任何請求。

因此,我完全失去了與設備的聯繫。它在Tx/Rx上也沒有響應。

在舊版固件v2.30下,Ad Hoc模式的默認IP地址爲169.254.1.1,這是一個鏈路本地地址,在沒有DHCP的情況下爲自分配保留,但情況並非如此。在這種情況下,您不能使用鏈接本地地址作爲默認地址。

以上內容清楚地表明,編寫固件的所謂工程師對互聯網協議沒有認識或理解。就硬件而言,它似乎是一個很棒的設備,但固件顯然是由智力遲鈍者編寫的。

+0

您是否找到解決方案?我有完全一樣的問題。 – Jenn