异常: Software caused connection abort: socket write error

java.sql.SQLException: Io 异常: Software caused connection abort: socket write error

 

 

今天写了一个广播程序,用java测试的时候没有什么问题,但是用flash的客户端测试点时候就报下面的错误,想了很长时间也找不出问题的原因。 原来是flash软件在测试的时候不像java客户端一样,每开启一个新的客户端连接的时候就自动创建一个新的线程。flash是每重新启动一个新的客户端的连接的时候就会把上次启动的客户端的连接给关闭,也就是说在将上次的socket关掉。这样java服务器在向客户端发送信息的时候,客户端的连接已经关掉,所以自然就无法接收该信息,导致java提示“connection abort”错误,进而也就无法进行写操作了。所以这个异常出现的原因就是客户端非正常关闭,或者是由于网络的问题用户掉线,而产生该异常,因此在java服务器端就应该实时的检测客户端的连接状况,无论是什么原因导致用户掉线,都要将该用户从用户在线列表中删除,否则服务器就无法正常工作,严重的时候可能导致服务器的因为阻塞而死掉,这是应该注意到问题。

 

解决该问题的最好办法就是时时检测在线用户的连接情况,一旦发现用连接出现问题,立即强制该用户推出在线用户列表,也即将其删除出要广播的用户队列中。这样就可以保证在服务器广播的时候不会由于用户的非正常退出而导致服务器端出现工作的异常。

 

下面是该异常的详细信息:

java.sql.SQLException: Io 异常: Software caused connection abort: socket write error

java.net.SocketException: Software caused connection abort: socket write error

       at java.net.SocketOutputStream.socketWrite0(Native Method)

       at java.net.SocketOutputStream.socketWrite(Unknown Source)

       at java.net.SocketOutputStream.write(Unknown Source)

       at com.toplx.game.server.SendMessage.sendObject(SendMessage.java:40)

       at com.toplx.game.server.BroadcastMsg.sendMsgToAll(BroadcastMsg.java:42)

       at com.toplx.game.server.GameThread.run(GameThread.java:53)

       at java.lang.Thread.run(Unknown Source)

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值