Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与wiFly通信时出现连接错误_Java_Android_Sockets - Fatal编程技术网

Java 与wiFly通信时出现连接错误

Java 与wiFly通信时出现连接错误,java,android,sockets,Java,Android,Sockets,我正在尝试在我的android设备和(RN-171)模块之间建立通信。我在android设备上创建了一个ad-hoc网络,并将wiFly连接到网络。wiFly被配置为监听169.254.1.1:2000。我在应用程序中创建套接字以与wiFly通信。代码: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; i

我正在尝试在我的android设备和(RN-171)模块之间建立通信。我在android设备上创建了一个ad-hoc网络,并将wiFly连接到网络。wiFly被配置为监听169.254.1.1:2000。我在应用程序中创建套接字以与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.
03-29 21:55:40.352:W/AdHoc(15118):无法连接到/169.254.1.1(端口2000):连接失败:无法访问网络
03-29 21:55:40.352:W/System.err(15118):java.net.ConnectException:无法连接到/169.254.1.1(端口2000):连接失败:无法访问网络
03-29 21:55:40.362:W/System.err(15118):位于libcore.io.IoBridge.connect(IoBridge.java:114)
03-29 21:55:40.362:W/System.err(15118):位于java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
03-29 21:55:40.362:W/System.err(15118):位于java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
03-29 21:55:40.362:W/System.err(15118):位于java.net.Socket.startupSocket(Socket.java:566)
03-29 21:55:40.362:W/System.err(15118):位于java.net.Socket.tryalladdress(Socket.java:127)
03-29 21:55:40.362:W/System.err(15118):位于java.net.Socket(Socket.java:177)
03-29 21:55:40.362:W/System.err(15118):位于java.net.Socket(Socket.java:149)
03-29 21:55:40.362:W/System.err(15118):位于com.example.udp.MainActivity.onCreate(MainActivity.java:33)
03-29 21:55:40.362:W/System.err(15118):在android.app.Activity.performCreate(Activity.java:4492)上
03-29 21:55:40.362:W/System.err(15118):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)上
03-29 21:55:40.362:W/System.err(15118):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
03-29 21:55:40.362:W/System.err(15118):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
03-29 21:55:40.372:W/System.err(15118):在android.app.ActivityThread.access$600(ActivityThread.java:123)
03-29 21:55:40.372:W/System.err(15118):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
03-29 21:55:40.372:W/System.err(15118):在android.os.Handler.dispatchMessage(Handler.java:99)上
03-29 21:55:40.372:W/System.err(15118):在android.os.Looper.loop(Looper.java:137)
03-29 21:55:40.372:W/System.err(15118):位于android.app.ActivityThread.main(ActivityThread.java:4424)
03-29 21:55:40.372:W/System.err(15118):位于java.lang.reflect.Method.invokenactive(本机方法)
03-29 21:55:40.372:W/System.err(15118):位于java.lang.reflect.Method.invoke(Method.java:511)
03-29 21:55:40.382:W/System.err(15118):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-29 21:55:40.382:W/System.err(15118):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-29 21:55:40.382:W/System.err(15118):在dalvik.System.NativeStart.main(本机方法)
03-29 21:55:40.382:W/System.err(15118):由以下原因引起:libcore.io.ErrnoException:连接失败:ENETUNREACH(网络无法访问)
03-29 21:55:40.382:W/System.err(15118):位于libcore.io.Posix.connect(本机方法)
03-29 21:55:40.382:W/System.err(15118):位于libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
03-29 21:55:40.382:W/System.err(15118):在libcore.io.IoBridge.connectErrno(IoBridge.java:127)
03-29 21:55:40.382:W/System.err(15118):位于libcore.io.IoBridge.connect(IoBridge.java:112)
03-29 21:55:40.382:W/系统错误(15118):。。。还有21个
03-29 21:55:40.392:W/System.err(15118):无法获取连接到:wiFly的I/O。

我在android 4.0.4上运行它,并在清单文件中包含了所有必要的权限。

您的手机有什么IP地址

您需要将手机配置为具有与wifly模块相同范围的ip地址,或者让wifly通过其dhcp服务器为您提供ip

如果您还没有将固件升级到v4,那么您可能应该首先这样做,它修复了一些问题,但与v2固件相比有一个明显的优势-它创建了一个软AP,您的设备可以连接到该AP,并且默认情况下,将为您的手机提供一个ip地址。然后,您就可以连接到它,几乎没有问题


作为在软ap模式下运行的补充说明,wifly的ip地址为1.2.3.4-不知道他们为什么选择该地址:/

您不能对任何设备使用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服务器也不响应任何请求

因此,我完全失去了与设备的联系。它在发送/接收时也没有响应

在旧固件v2.30下,临时模式默认IP地址为169.254.1.1,这是在没有DHCP的情况下为自分配保留的链路本地地址,情况并非如此。在这种情况下,不能将链接本地地址用作默认地址


上述情况清楚地表明,编写固件的所谓工程师不了解或不理解互联网协议。就硬件而言,这似乎是一款很棒的设备,但固件显然是由智障人士编写的。

您能发布实际的IOE异常消息吗?异常可能发生在PrintWriter或BufferedReader行上,并且它实际上正在连接。@spartacus这是一个警告,因此不会有更多详细信息。无论如何,编辑:)这似乎仍然是您正在打印的错误。我想看的是IOEXE