安卓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后要开双线程 怎么开 求知道 给个例子吧 求求了

Android socket

文艺少年恋菌 10 years, 3 months ago

安卓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

Your Answer