针对套接字关闭异常:Socket closed解决方案

socket
思路:客户端连接服务器,当客户端要退出时,首先要关闭两者之间的通信,再将其各自的处理类所在的线程关闭掉。
                        在做多线程的猜拳小游戏中,其中一个玩家(客户端)退出,断开与服务器的连接,首先关闭了通信的inputStream和outputStream,再关闭socket对象。
                        dis.close();
          dos.flush();
           dos.close();
                        send("exit "+uname);
                     connected=false;//设置flag使其退出线程
                          在服务器中,接收来自客户端的退出信息,关闭通信
                          //某人退出连接
                        dis.close();
                        dos.flush();
                        dos.close();
                        sk.close();
                        break;
               当我执行退出操作时,就会报java.net.SocketException: Socket closed
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:118)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:155)
    at java.io.DataOutputStream.write(DataOutputStream.java:107)
    at java.io.DataOutputStream.writeUTF(DataOutputStream.java:401)
    at java.io.DataOutputStream.writeUTF(DataOutputStream.java:323)
    at com.mummy.ggbt.Client.send(Client.java:512)
    at com.mummy.ggbt.Client.access$1(Client.java:509)
    at com.mummy.ggbt.Client$9.widgetSelected(Client.java:479)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3823)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3422)
    at com.mummy.ggbt.Client.open(Client.java:96)
    at com.mummy.ggbt.Client.main(Client.java:73)


                原因:重复关闭了流   (此错误在控制台打印了俩次) 在退出线程时,默认会关闭流。(图二)在服务器端则
一直报错IO异常,对于服务器端的输入流来说,它一直获取不到资源。
                解决方法:注释掉客户端的 dis.close(); dos.flush(); dos.close();即可

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值