本帖最后由 razor20060930 于 2012-08-09 12:11:16 编辑

解决方案 »

  1.   

    通信用的是什么协议呢?总的分为字节流通信,字符流通信,这个一定要弄清楚,另外你可以询问服务器方面是不是真的没有建立socket连接
      

  2.   

    在Android4.0虚拟机上运行,现象相同。 一点连接按钮就挂掉。
    日志如下:
    08-05 10:41:09.591: D/dalvikvm(1650): Not late-enabling CheckJNI (already on)
    08-05 10:41:15.294: D/gralloc_goldfish(1650): Emulator without GPU emulation detected.
    08-05 10:41:18.603: D/AndroidRuntime(1650): Shutting down VM
    08-05 10:41:18.603: W/dalvikvm(1650): threadid=1: thread exiting with uncaught exception (group=0x409961f8)
    08-05 10:41:18.873: E/AndroidRuntime(1650): FATAL EXCEPTION: main
    08-05 10:41:18.873: E/AndroidRuntime(1650): android.os.NetworkOnMainThreadException
    08-05 10:41:18.873: E/AndroidRuntime(1650):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1084)
    08-05 10:41:18.873: E/AndroidRuntime(1650):  at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:74)
    08-05 10:41:18.873: E/AndroidRuntime(1650):  at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
    08-05 10:41:18.873: E/AndroidRuntime(1650):  at libcore.io.IoBridge.connect(IoBridge.java:112)
    08-05 10:41:18.873: E/AndroidRuntime(1650):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
    08-05 10:41:18.873: E/AndroidRuntime(1650):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    08-05 10:41:18.873: E/AndroidRuntime(1650):  at java.net.Socket.startupSocket(Socket.java:566)
    08-05 10:41:18.873: E/AndroidRuntime(1650):  at java.net.Socket.tryAllAddresses(Socket.java:127)
    08-05 10:41:18.873: E/AndroidRuntime(1650):  at java.net.Socket.<init>(Socket.java:177)
    08-05 10:41:18.873: E/AndroidRuntime(1650):  at java.net.Socket.<init>(Socket.java:149)
    08-05 10:41:18.873: E/AndroidRuntime(1650):  at edu.nwpu.cis.androidtcptest.MainActivity$2.onClick(MainActivity.java:119)
    08-05 10:41:18.873: E/AndroidRuntime(1650):  at android.view.View.performClick(View.java:3480)
    08-05 10:41:18.873: E/AndroidRuntime(1650):  at android.view.View$PerformClick.run(View.java:13983)
    08-05 10:41:18.873: E/AndroidRuntime(1650):  at android.os.Handler.handleCallback(Handler.java:605)
    08-05 10:41:18.873: E/AndroidRuntime(1650):  at android.os.Handler.dispatchMessage(Handler.java:92)
    08-05 10:41:18.873: E/AndroidRuntime(1650):  at android.os.Looper.loop(Looper.java:137)
    08-05 10:41:18.873: E/AndroidRuntime(1650):  at android.app.ActivityThread.main(ActivityThread.java:4340)
    08-05 10:41:18.873: E/AndroidRuntime(1650):  at java.lang.reflect.Method.invokeNative(Native Method)
    08-05 10:41:18.873: E/AndroidRuntime(1650):  at java.lang.reflect.Method.invoke(Method.java:511)
    08-05 10:41:18.873: E/AndroidRuntime(1650):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    08-05 10:41:18.873: E/AndroidRuntime(1650):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    08-05 10:41:18.873: E/AndroidRuntime(1650):  at dalvik.system.NativeStart.main(Native Method)
    08-05 10:41:24.263: I/Process(1650): Sending signal. PID: 1650 SIG: 9
      

  3.   

    准备用TCP传几个字节的控制命令。
    现在卡在Android系统上创建Socket连接失败上。 
      

  4.   

    4.0以后不能在ui线程上进行耗时操作.NetworkOnMainThreadException 一看这个异常的名字就知道了啊.把网络操作写在后台线程里.
      

  5.   

    出错的原因是,你在主线程上进行了网络通讯,出错提示里面已经告诉你了:NetworkOnMainThreadException解决办法,将网络通讯的代码放到线程里面进行
                new Thread(){
                @Override
                public void run()
                {
                               //你的socket代码放这里            }
                }.start();
      

  6.   

    android 3.0 以后不允许这种在ui线程上面的耗时操作了。
    StrictMode 这个类解决着这种问题特别的方便,楼主可以尝试下以下的代码!
     if (android.os.Build.VERSION.SDK_INT > 9) 

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