2016-12-30 43 views
2

我與Android套接字工作,並不斷收到此錯誤爲什麼會出現此錯誤:java.net.PlainSocketImpl.checkNotClosed(PlainSocketImpl.java:116)?

的logcat:


[xiaomi-mi_4i-a98ed4b2]: E/File couldn't be stored: java.net.PlainSocketImpl.checkNotClosed(PlainSocketImpl.java:116) 
[xiaomi-mi_4i-a98ed4b2]: W/System.err: java.net.SocketException: Socket is closed 
[xiaomi-mi_4i-a98ed4b2]: W/System.err:  at java.net.PlainSocketImpl.checkNotClosed(PlainSocketImpl.java:116) 
[xiaomi-mi_4i-a98ed4b2]: W/System.err:  at java.net.PlainSocketImpl.getInputStream(PlainSocketImpl.java:213) 
[xiaomi-mi_4i-a98ed4b2]: W/System.err:  at java.net.Socket.getInputStream(Socket.java:363) 
[xiaomi-mi_4i-a98ed4b2]: W/System.err:  at com.rkp.musictest1.wifi.datatransfer.WifiSocket.receiveFileSocket(WifiSocket.java:264) 
[xiaomi-mi_4i-a98ed4b2]: W/System.err:  at com.rkp.musictest1.wifi.datatransfer.WifiSocket$4.run(WifiSocket.java:249) 
[xiaomi-mi_4i-a98ed4b2]: W/System.err:  at com.rkp.musictest1.wifi.datatransfer.SimpleAsynTask$simpleTask.doInBackground(SimpleAsynTask.java:65) 
[xiaomi-mi_4i-a98ed4b2]: W/System.err:  at com.rkp.musictest1.wifi.datatransfer.SimpleAsynTask$simpleTask.doInBackground(SimpleAsynTask.java:23) 
[xiaomi-mi_4i-a98ed4b2]: W/System.err:  at android.os.AsyncTask$2.call(AsyncTask.java:288) 
[xiaomi-mi_4i-a98ed4b2]: W/System.err:  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
[xiaomi-mi_4i-a98ed4b2]: W/System.err:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
[xiaomi-mi_4i-a98ed4b2]: W/System.err:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
[xiaomi-mi_4i-a98ed4b2]: W/System.err:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
[xiaomi-mi_4i-a98ed4b2]: W/System.err:  at java.lang.Thread.run(Thread.java:818) 
+0

謝謝@GhostCat,但我仍然對導致套接字或其他FileDescriptor被關閉的內容感到困惑。 –

+2

您關閉了插座,然後繼續使用它。可能你不知道關閉輸入流或輸出流會關閉套接字。 – EJP

+0

這就是它..感謝@EJP –

回答

3

你可以看看到源代碼自己 - 這是enter link description here

private void More ...checkNotClosed() throws IOException { 
    if (!fd.valid()) { 
     throw new SocketException("Socket is closed"); 
    } 
} 

fd是一個FileDescriptor;併爲此我們找到;關於有效()方法:

返回: 如果真文件描述符對象表示一個有效的,打開文件,插座,或其他活動的I/O連接;否則爲假。

因此,長話短說:有些東西是封閉的,不應該關閉。但進一步調試是沒有看到導致此錯誤的代碼/活動。

希望這足以讓你現在就去!

相關問題