|
|
|
Добавить многопоточность в приложение
|
|||
|---|---|---|---|
|
#18+
Добрый вечер всем есть такое задание Создать приложения сервера и клиента для передачи файлов. Сервер должен уметь обслуживать одновременно несколько клиентов. Запросы обслуживаемые сервером: Отправить список доступных файлов (из одной заданной при старте сервера директории). Отправить содержимое запрошенного файла. Сервер также собирает статистику (количество скачиваний каждого файла) и каждые N секунд сохраняет статистику в текстовом формате в файл. Клиент при подключении выдает приглашение пользователю на ввод команды, возможные команды: Запрос списка доступных файлов. Скачать один файл и сохранить его локально. Завершить сессию. После выполнения запросов 1 или 2 клиент ожидает новой команды от пользователя. Интерфейс пользователя: консоль. Предусмотреть логгирование в файл информации о происходящих процессах. Предусмотреть безопасную остановку сервера. функционал уже весь реализован, осталось правильно распределить по потокам. Я пока предполагаю для сервера: создавать поток для обработки команд от 1 юзера, по принципу 1 юзер - 1 поток. поток для записи статистики поток который принимает команды из консоли (для возможности остановки сервера) Либо лучше наверно будет создать поток для каждого метода, взаимодействующего с клиентами? Потому что в первом случае если юзеры отправят команду одновременно, ресурс может быть занят и будет ошибка Для клиента должно хватить консольного потока считывающего команды/получающего ответ + потока пишущего логи. Еще сейчас обмен данными между сервером и клиентами идет посредством строк, что не есть гуд, в результате программа может передавать только мелкие текстовые файлы, какие потоки лучше использовать для полноценной передачи и записи файлов? сам гавнокод) Сервер Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. Клиент Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2016, 22:11 |
|
||
|
Добавить многопоточность в приложение
|
|||
|---|---|---|---|
|
#18+
с потоками разобрался, всё работает как надо, правда пересылать можно только текстовые файлы не больше 64кб) Хотелось бы сделать более универсально. в этом куске кода из файла получается массив байтов на стороне сервера Код: java 1. 2. 3. 4. 5. массив не пустой, байты там есть, если передавать их строкой всё ок, а если так Код: java 1. то возможно что нет. здесь на стороне клиента пытаемся читать входящий поток в байтовый массив, но он по какой-то причине остается пуст Код: java 1. 2. где может быть проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2016, 22:27 |
|
||
|
Добавить многопоточность в приложение
|
|||
|---|---|---|---|
|
#18+
archeliteгде может быть проблема? Как минимум проблема в том, что нужно придумать некий заголовок, исходящий от сервера перед отправкой, где указывать полный размер файла и, например, его имя. Клиент должен знать, что и сколько ему придет. Это решит проблему размера и типа файлов (только текстовые). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2016, 08:58 |
|
||
|
Добавить многопоточность в приложение
|
|||
|---|---|---|---|
|
#18+
wadman, заголовок есть, при отправке файла с сервера отправляется строкой заголовок + байтовый массив по размеру файла. Размер файл получает при чтении из директории сервера. Если писать файлы не строками, а через байтовый массив, то получается что клиент создает и записывает файл в нужном формате и с нужным заголовокм, но он пустой, весит 0 байт, содержимое где-то пропадает. Буду очень благодарен если покажете пример кода с клиент-сервером, где передаются файлы через байтовый буффер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2016, 17:58 |
|
||
|
Добавить многопоточность в приложение
|
|||
|---|---|---|---|
|
#18+
archelite Код: java 1. 2. 3. 4. 5. Код: java 1. 2. Не корректное использование ф-ции available(). Они совсем другое делает / возвращает. AFAIK wadmanКак минимум проблема в том, что нужно придумать некий заголовок, исходящий от сервера перед отправкой, где указывать полный размер файла и, например, его имя. Клиент должен знать, что и сколько ему придет. Это решит проблему размера и типа файлов (только текстовые). +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2016, 18:11 |
|
||
|
Добавить многопоточность в приложение
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, большое спасибо, исправил, только есть проблема с кодировкой в некоторых файлах, если например передаю картинки или некоторые документы, принятые файлы не открывает, пишет что файл поврежден, хотя размер, имя, формат - всё совпадает до байта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2016, 21:05 |
|
||
|
Добавить многопоточность в приложение
|
|||
|---|---|---|---|
|
#18+
Тут странно как-то. С кодировками. Код: java 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 00:39 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=94&tid=2123963]: |
0ms |
get settings: |
10ms |
get forum list: |
10ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
2ms |
| others: | 235ms |
| total: | 351ms |

| 0 / 0 |
