一个按钮,点击调用shut_code发送信息。shut_code贴上:
private void shut_code()
{
String msg= "shutdown";
int port = 8099;
DatagramSocket s = null;
try{
s = new DatagramSocket();
}catch(SocketException e){
e.printStackTrace();
}
InetAddress local = null;
try{
local = InetAddress.getByName("192.168.1.211");
}catch(UnknownHostException e){
e.printStackTrace();
}
int msg_length = msg.length();
byte[] msgbyte = msg.getBytes();
DatagramPacket p = new DatagramPacket(msgbyte,msg_length,local,port);
try{
s.send(p);
}catch(IOException e){
e.printStackTrace();
}
}
在模拟器上运行正常,android版本设定的是4.0,真机也是4.0的
检查下网络环境,因为这是真机和模拟器最大的不同。
模拟器不知道,真机是用的wifi
查看开发工具的log日志,会提示你错误在哪里
03-26 15:12:17.297: W/dalvikvm(22135): threadid=1: thread exiting with uncaught exception (group=0x2b542210)
03-26 15:12:17.297: E/AndroidRuntime(22135): FATAL EXCEPTION: main
03-26 15:12:17.297: E/AndroidRuntime(22135): android.os.NetworkOnMainThreadException
03-26 15:12:17.297: E/AndroidRuntime(22135): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1108)
03-26 15:12:17.297: E/AndroidRuntime(22135): at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:175)
03-26 15:12:17.297: E/AndroidRuntime(22135): at libcore.io.IoBridge.sendto(IoBridge.java:476)
03-26 15:12:17.297: E/AndroidRuntime(22135): at java.net.PlainDatagramSocketImpl.send(PlainDatagramSocketImpl.java:182)
03-26 15:12:17.297: E/AndroidRuntime(22135): at java.net.DatagramSocket.send(DatagramSocket.java:287)
03-26 15:12:17.297: E/AndroidRuntime(22135): at com.example.centercontrol.MainActivity.open_code(MainActivity.java:115)
03-26 15:12:17.297: E/AndroidRuntime(22135): at com.example.centercontrol.MainActivity.access$0(MainActivity.java:95)
03-26 15:12:17.297: E/AndroidRuntime(22135): at com.example.centercontrol.MainActivity$1.onClick(MainActivity.java:47)
03-26 15:12:17.297: E/AndroidRuntime(22135): at android.view.View.performClick(View.java:3534)
03-26 15:12:17.297: E/AndroidRuntime(22135): at android.view.View$PerformClick.run(View.java:14263)
03-26 15:12:17.297: E/AndroidRuntime(22135): at android.os.Handler.handleCallback(Handler.java:605)
03-26 15:12:17.297: E/AndroidRuntime(22135): at android.os.Handler.dispatchMessage(Handler.java:92)
03-26 15:12:17.297: E/AndroidRuntime(22135): at android.os.Looper.loop(Looper.java:137)
03-26 15:12:17.297: E/AndroidRuntime(22135): at android.app.ActivityThread.main(ActivityThread.java:4441)
03-26 15:12:17.297: E/AndroidRuntime(22135): at java.lang.reflect.Method.invokeNative(Native Method)
03-26 15:12:17.297: E/AndroidRuntime(22135): at java.lang.reflect.Method.invoke(Method.java:511)
03-26 15:12:17.297: E/AndroidRuntime(22135): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-26 15:12:17.297: E/AndroidRuntime(22135): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-26 15:12:17.297: E/AndroidRuntime(22135): at dalvik.system.NativeStart.main(Native Method)
真机测试的logcat,大概知道是错在网络线程。求大神看看怎么修改
错误应该在这个位置
try{
s.send(p);
}catch(IOException e){
e.printStackTrace();
}
求大神来看究竟有什么错误,而且捕捉不了异常直接就程序崩溃了
建立网络连接 只能放在非UI线程里面,你这个错误是放在主线程里面,导致的