學習了socket ,在做一個類似qq的c/s結構的聊天軟體。發現了一個問題
就是在用戶端與伺服器通信後,伺服器為用戶端開啟一個線程,使用while(true)循環時刻監聽是否有通信。
在界面開啟時沒有任何異常,可是當界面關閉 就一直抛出異常了。
開啟線程代碼如下:
異常内容如下:
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:113)
at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2266)
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2279)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2750)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280)
at cn.edu.xynu.socket.ClientThread.run(ClientThread.java:22)
仔細想想,或許在用戶端關閉後 socke是t斷開了,可是伺服器為用戶端已經開啟的線程還在執行。
是以要處理一下異常。
在為用戶端開啟的線程裡面定義一個布爾型變量,isOnline=true