2013-07-21 53 views
0

我想要开始使用基本的客户端服务器的东西。我的一台计算机上运行了Java服务器套接字程序。我的Android手机正在运行一个简单的应用程序,并充当客户端。我希望手机能够连接到我的电脑上的Java程序。简单的客户端服务器程序与本地IP地址

客户端尝试连接到我的计算机的本地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) 
+1

您的手机是否与您的电脑位于同一网络?你能从电脑上ping你的手机吗? – Gomino

+0

您的wifi路由器可能不允许您发送connect()请求到该端口,甚至在本地。它在您的计算机上运行双方时起作用,因为它实际上从未通过网络发送数据 - 它意识到您将它发送给自己,只是假装发送了它。 –

+0

我能够从我的电脑ping我的手机。 – Cricketer

回答

0

随着Android和插座,你需要注意的几件事情

  1. 的Android需要在客户端,因为其IP地址有望以比服务器更频繁地更改
  2. 您使用的端口号应该> 1024
  3. 如果在模拟器上,您需要知道模拟器的IP 10.是什么。查阅Android文档。
  4. 权限在清单

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

编辑:

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