Итак, я пишу многопоточный сервер, который принимает в качестве входных данных имя сервера, порт, количество потоков и имя файла для запроса. Моя задача - создать сокет через main, а затем расширить объект Runnable ( который принимает сокет и имя файла) .. У меня также есть таймерная задача, которая срабатывает по истечении 5 секунд, а затем закрывает и останавливает все потоки .. Мой текущий дизайн - создать сокет в main, передать его в runnable (где существует условие while для условия x, запрашивающее файл снова и снова), а затем, когда задача запускается, она устанавливает для частной общей переменной x в runnable значение false.
Я сталкиваюсь с множеством проблем со сломанной трубой, из-за чего я полагаю, что мой дизайн имеет недостатки. Я что-то упустил? Я не использую синхронизированные / заблокированные переменные. Должен ли я создавать новый сокет для каждого запроса файла?
StackTrace:
java.net.SocketException: Broken pipe
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.writeBytes(DataOutputStream.java:259)
at FR.filesRecv(Client.java:62)
at FR.run(Client.java:79)
at java.lang.Thread.run(Thread.java:637)