0

我正在尝试开始使用基本的客户端服务器的东西。我有一个 Java 服务器套接字程序在我的一台计算机上运行。我的 Android 手机正在运行一个简单的应用程序并充当客户端。我希望手机能够连接到我计算机上的 Java 程序。

客户端尝试连接到我计算机的本地 IP 地址,但我无法连接。我得到一个 IOException。这是我正在使用的 Android 代码:

        try {
            echoSocket = new Socket("192.168.0.19", 7077);
            System.out.println("length: "+ "socket created!");
        } catch (UnknownHostException e) {
            System.out.println("length: "+ "Don't know about host.");
        } catch (IOException e) {
            System.out.println("Couldn't get I/O for "
                    + "the connection.");
        }

如果我在我的计算机上同时运行客户端和服务器,然后尝试连接到计算机的本地 IP(同上),它工作正常。但我想从我的手机连接。

有什么想法我需要做什么吗?

编辑:这是堆栈跟踪:

   07-21 15:37:34.223: W/System.err(3474): android.os.NetworkOnMainThreadException
07-21 15:37:34.223: W/System.err(3474):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
07-21 15:37:34.223: W/System.err(3474):     at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
07-21 15:37:34.223: W/System.err(3474):     at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
07-21 15:37:34.223: W/System.err(3474):     at libcore.io.IoBridge.connect(IoBridge.java:112)
07-21 15:37:34.223: W/System.err(3474):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
07-21 15:37:34.223: W/System.err(3474):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
07-21 15:37:34.223: W/System.err(3474):     at java.net.Socket.startupSocket(Socket.java:566)
07-21 15:37:34.223: W/System.err(3474):     at java.net.Socket.tryAllAddresses(Socket.java:127)
07-21 15:37:34.223: W/System.err(3474):     at java.net.Socket.<init>(Socket.java:177)
07-21 15:37:34.223: W/System.err(3474):     at java.net.Socket.<init>(Socket.java:149)
07-21 15:37:34.223: W/System.err(3474):     at com.nikhildev.cricketeye.MainActivity.startVideoCamera(MainActivity.java:45)
07-21 15:37:34.223: W/System.err(3474):     at java.lang.reflect.Method.invokeNative(Native Method)
07-21 15:37:34.223: W/System.err(3474):     at java.lang.reflect.Method.invoke(Method.java:511)
07-21 15:37:34.223: W/System.err(3474):     at android.view.View$1.onClick(View.java:3594)
07-21 15:37:34.223: W/System.err(3474):     at android.view.View.performClick(View.java:4204)
07-21 15:37:34.223: W/System.err(3474):     at android.view.View$PerformClick.run(View.java:17355)
07-21 15:37:34.223: W/System.err(3474):     at android.os.Handler.handleCallback(Handler.java:725)
07-21 15:37:34.223: W/System.err(3474):     at android.os.Handler.dispatchMessage(Handler.java:92)
07-21 15:37:34.223: W/System.err(3474):     at android.os.Looper.loop(Looper.java:137)
07-21 15:37:34.223: W/System.err(3474):     at android.app.ActivityThread.main(ActivityThread.java:5041)
07-21 15:37:34.233: W/System.err(3474):     at java.lang.reflect.Method.invokeNative(Native Method)
07-21 15:37:34.233: W/System.err(3474):     at java.lang.reflect.Method.invoke(Method.java:511)
07-21 15:37:34.233: W/System.err(3474):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-21 15:37:34.233: W/System.err(3474):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-21 15:37:34.233: W/System.err(3474):     at dalvik.system.NativeStart.main(Native Method)
4

1 回答 1

0

使用 Android 和套接字时,您需要注意一些事项

  1. Android 需要成为客户端,因为它的 IP 地址预计会比服务器更频繁地更改
  2. 您使用的端口号应大于 1024
  3. 如果在模拟器上,您需要注意模拟器的 IP 是 10.something。查找 Android 文档。
  4. 清单中的权限

最后,您的问题是您在主 UI 线程中运行网络 api。您需要在异步任务中运行相同的任务。这就是为什么你得到 StrictMode 异常的原因。

编辑 :

至于 ping,请检查您是否可以 ping 到您的网络路由器。如果您可以 ping 到外部世界,那么您的问题是您的路由器阻止了内部 ping。

于 2013-07-22T03:40:28.040 回答