安卓Socket发起失败 急
我现在正在中山进行一个硬件项目,通过安卓和iOS的客户端,同51单片机通信Socket&UDP。但是我在当地遭遇到了各类品牌的千元级别的智能机(华为、步步高、金立)等等,我在上海本来写好的安卓代码在我原生安卓阿尔卡特2.3.3上成功的Socket发起,在这里完全不清楚为何都发起不了我的try{}一上来就挂掉了。
问题好像是:华为 步步高 金立 是TCP请求处挂了 try{} 能进入try 但是 Socket跑不了
Socket socket_s=null;
System.out.println(“==== 新的TCP请求发起 ====“);
try{
System.out.println(“== 进入try ==“);
socket_s=new Socket(SERVER_IP,SERVER_PORT);
OutputStream outputStream=socket_s.getOutputStream();
System.out.println(“== Socket成功挂起 ==“);
...
}catch{...}...
阿尔卡特2.3.3原生没问题
华为 HUAWEI P6-T00 安卓 4.4.2 系统 Emotion 2.0 跑不进去创建Socket
【备注】
刚才有朋友和我说 是因为在主线程中 所以搞不定
说安卓4.0后要开双线程 怎么开 求知道 给个例子吧 求求了
文艺少年恋菌
10 years, 3 months ago
Answers
安卓4.0后不准在主线程(UI线程)上创建网络连接,所以你可以new Thread一下,把任务交给新线程处理,但新线程不能操作UI,所以如果你要更新UI,可以使用android.os.Handler来做。
举个例子如下:
android.os.Handler handler=new android.os.Handler(){
@Override
public void handleMessage(Message msg){
if(msg.what==0x567){
Bundle data=msg.getData();
//主线程要做的其他事
}else{
super.handleMessage(msg);
}
}
};
//开新线程
new Thread() {
@Override
public void run(){
Socket socket_s=null;
System.out.println("==== 新的TCP请求发起 ====");
try{
System.out.println("== 进入try ==");
socket_s=new Socket(SERVER_IP,SERVER_PORT);
OutputStream outputStream=socket_s.getOutputStream();
System.out.println("== Socket成功挂起 ==");
...
//数据回调给handler处理
android.os.Message message= new android.os.Message();
message.what=0x567;
if(strResult!=null){
android.os.Bundle data=new android.os.Bundle();
//随便发送
data.putString("abc","要发送的数据");
message.setData(data);
}
handler.sendMessage(message);
}catch{...}
}.start();
你也可以用AsyncTask来做,它有一个自己维护的内部线程池,还有可供主线程用的回调方法。
Yohoshi
answered 10 years, 3 months ago