问题1:做的一个类似QQ的C/S聊天软件,运行服务器端后,服务器开始监听,但是按面板标题栏上的×(关闭按钮),没有反应,只能用控制台上的终止按钮来结束。
问题2:客户端成功登录后,跳出联系人列表的界面,但按此面板上的×想退出客户端,客户端不停报出异常:SocketException:Connection Reset.
        at java.net.SocketInputStream.read(Unknown Source)
at java.io.ObjectInputStream$PeekInputStream.read(Unknown Source)
at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
报错是不是因为客户端断开连接后,S和C之间的线程还存在啊?关掉客户端后,不是socket已经断开了吗,socket既然断开了,线程还会存在?我想问的是怎么加入 结束io流、线程、和socket...?在哪加?顺序是什么?

解决方案 »

  1.   

    1、要有异常处理
    2、用udp
      

  2.   

    1.为客户端的关闭加一个处理,setDefaultCloseOperation(EXIT_ON_CLOSE)
    这个时候按eclipse的终止按钮一样会在服务端报错,就为服务端做一个异常处理2.没试过
      

  3.   

    我改过了,我在客户端重新加了个退出的按钮,但用户点击该按钮时,先通过socket发个type为 messageleft的message,服务器端接收到了这种type后,将服务器端存放userid和线程的hashmap中的发送该离开请求的用户的那个线程interrupt,再将这个userid删了,但服务器端还是异常:Connection reset。
    请问做完以上这些,是不是要添加刷新连接的操作?
      

  4.   

    我试过了,不管是加setDefaultCloseOperation(EXIT_ON_CLOSE),还是加一个按钮触发{system.exit(0);},都不行。是不是阻塞式的监听原因?