异常: 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服务器端就应该实时的检测客户端的连接状况,无论是什么原因导致用户掉线,都要将该用户从用户在线列表中删除,否则服务器就无法正常工作,严重的时候可能导致服务器的因为阻塞而死掉,这是应该注意到问题。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

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

 

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

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)

 

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页