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();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM