Я разрабатываю сетевую игру, поэтому у меня есть клиент с одним потоком прослушивания вещей, поступающих с сервера, а также на сервере есть поток прослушивания, который прослушивает сообщения от клиента.
В одной из панелей клиента я делаю следующее:
отправив какое-то сообщение на сервер и после двух строк кода из того же места, сделайте это снова с другой функцией.
Результатом является запуск кода, который иногда работает хорошо, а иногда выдает исключение.
Исключение выдается в строке одной из отправляющих функций на клиентской панели.
Примечание: если я помещу Thread.sleep(1000);
между двумя отправлениями, исключение не выдается, но, как вы знаете, это плохое решение ..
* Две функции, которые отправляют информацию одному-единственному потоку сервера:
ClientCommunicationThread.UpdateServerOfTimeEnded
ClientCommunicationThread.SendRequestToClosePlayerThreadAndRemoveItFromPlayersOnServer
Как я могу решить эту проблему
Спасибо.
Это трассировка стека:
java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:115)
at java.io.DataOutputStream.writeInt(DataOutputStream.java:181)
at GUI.ClientCommunicationThread.UpdateServerOfTimeEnded(ClientCommunicationThread.java:850)
at GUI.JPanelMainGame$2.actionPerformed(JPanelMainGame.java:312)
at javax.swing.Timer.fireActionPerformed(Timer.java:271)
at javax.swing.Timer$DoPostEvent.run(Timer.java:201)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:115)
at java.io.DataOutputStream.writeInt(DataOutputStream.java:180)
at GUI.ClientCommunicationThread.SendRequestToClosePlayerThreadAndRemoveItFromPlayersOnServer(ClientCommunicationThread.java:824)
at GUI.JPanelMainGame$2.actionPerformed(JPanelMainGame.java:325)
at javax.swing.Timer.fireActionPerformed(Timer.java:271)
at javax.swing.Timer$DoPostEvent.run(Timer.java:201)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)