zoukankan      html  css  js  c++  java
  • Android Socket发送信息时闪退

    尝试Android写Socket通信的时候,遇到的个坑,记录一下:

    1、无法建立连接。

      原因:没有添加网络使用权限请求;

      解决方式:在"AndroidMainfest.xml"中添加<uses-permission android:name="android.permission.INTERNET"/>

    2、建立连接后正常接收信息,但发送信息时直接闪退,LogCat中异常提示为:android.os.NetworkOnMainThreadException

      原因:百度了一圈,发现是在Android 7版本后才出现的,对主线程上的一个TCP Socket的写入操作严格检查,也就是不能在主线程中进行Socket写入发送。

      解决方式:新建线程发送。

    3、新建发送信息的线程,仍然闪退

      原因:输出流也需要在新建的线程中new一个

    成功发送的代码如下

    new Thread(new Runnable(){
                        @Override
                        public void run() {
                            try {
                                //输出流写入发送编辑框的信息并指定类型UTF-8,注意要加换行
                                String str="TestString";
    
                                if(socket==null) return;
                                BufferedWriter outputStream=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                                outputStream.write(str);
                                //输出流发送至服务器
                                outputStream.flush();
    
                            } catch (UnsupportedEncodingException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                    }).start();
    
  • 相关阅读:
    数组
    JavaScript语法
    Math.random()
    第二第三周暑期集训总结
    第一周
    ACM课程学习总结
    专题四---总结
    专题四--1004
    专题四--1005
    专题四--1006
  • 原文地址:https://www.cnblogs.com/Elvis-Luo/p/11640796.html
Copyright © 2011-2022 走看看