|
|
|
Обмен файлами, два сокета
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. В общем, задача такая. Есть сервер. Я планирую сделать два сокета на разных портах - один для "диалога" между сервером и клиентом, второй для обмена файлами. Например клиент посылает по первому сокету команду на скачивание файла, тут же создается второй сокет и по нему происходит передача, а первый опять слушает клиента и принимает от него команды. Проблема в том, что я не знаю как это правильно сделать. Сразу, при подключении клиента создавать два сокета не красиво и не экономно - второй может вообще не понадобиться. Тогда второй сокет нужно создавать в момент получения сервером запроса на скачивание файла. Вот тут и начинаются непонятки. Когда создается ServerSocket, он делает accept() всех клиентов, точнее первым будет тот, кто успеет первым. Соответственно, серверу нужно знать, какому клиенту сделать accept(). А если таких сокетов будет много, то серверу надо как-то связывать их с клиентами... Вот как это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2011, 17:15:09 |
|
||
|
Обмен файлами, два сокета
|
|||
|---|---|---|---|
|
#18+
А зачем всё это в то время как уже давно разработаны такие протоколы как FTP и HTTP? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2011, 17:31:32 |
|
||
|
Обмен файлами, два сокета
|
|||
|---|---|---|---|
|
#18+
Да это что-то вроде учебного проекта. А что есть в HTTP, что можно использовать тут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2011, 17:36:01 |
|
||
|
Обмен файлами, два сокета
|
|||
|---|---|---|---|
|
#18+
Не, не надо так котегорично ... :) Человек, в принципе, делает не так уж неправильно. Просто сокет можно вешать и на другой порт, а вот обмен файлами оставить и на стандартном 80-ом. И делать получение/отдачу файлов стандартными средствами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2011, 17:37:08 |
|
||
|
Обмен файлами, два сокета
|
|||
|---|---|---|---|
|
#18+
IDVsbruckНе, не надо так котегорично ... :) Человек, в принципе, делает не так уж неправильно. Просто сокет можно вешать и на другой порт, а вот обмен файлами оставить и на стандартном 80-ом. И делать получение/отдачу файлов стандартными средствами. Какие средства Вы имеете ввиду? У меня проблема в том, что я пока не понимаю как за этим всем должен следить и управлять сервер. Ему нужно ведь иметь четкую связь между клиентом и двумя сокетами. Но с диалоговым сокетом связь в данном случае очевидна, а вот со вторым - с передающим/принимающим совсем не очевидна и потеряется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2011, 17:41:56 |
|
||
|
Обмен файлами, два сокета
|
|||
|---|---|---|---|
|
#18+
ну смотри если решать твою задачу - прослушивать на сокете и передавать файлы - второй сокет не нужен, для передачи данных используешь channel если упрощённо - Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. по коду не забудь разные Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2011, 17:43:02 |
|
||
|
Обмен файлами, два сокета
|
|||
|---|---|---|---|
|
#18+
bezb, в твоем коде передача идет сразу после получения запроса, и рассчитывается, что файл имеет небольшие размеры. Мои файлы будут иметь размеры до гигабайта, соответственно нужна возможностью прерывания передачи. А для этого серверу надо знать, какой сокет отключить. (Или, вообще сделать закрытие сокета на стороне клиента, и тогда тред на сервере тоже прекратит работу(?))... хм. А почему ты советуешь использовать именно channel? Не проще ли использовать просто Socket s = ServerSocket.accept() и далее работать с DataInput/OutputStream? Да, у меня все это дело по SSL работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2011, 17:52:33 |
|
||
|
Обмен файлами, два сокета
|
|||
|---|---|---|---|
|
#18+
DataInput/OutputStream здесь вообще к чему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2011, 17:55:33 |
|
||
|
Обмен файлами, два сокета
|
|||
|---|---|---|---|
|
#18+
BlazkowiczDataInput/OutputStream здесь вообще к чему? Я их планировал использовать для приема передачи файла, типа такого: SSLSocket sDialogue; ... DataInputStream socketInputStream = (DataInputStream) sDialogue.getInputStream(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2011, 17:59:38 |
|
||
|
Обмен файлами, два сокета
|
|||
|---|---|---|---|
|
#18+
Точнее не только файлов, а еще команды через них отпралять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2011, 18:01:10 |
|
||
|
Обмен файлами, два сокета
|
|||
|---|---|---|---|
|
#18+
Diego ViajeroТочнее не только файлов, а еще команды через них отпралять Образец . Есть TFTP - он попроще. Правда, для TCP его адаптировать придётся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2011, 09:43:34 |
|
||
|
Обмен файлами, два сокета
|
|||
|---|---|---|---|
|
#18+
Diego Viajero хоть большие, хоть маленькие в том месте создаёшь отдельный thread и в нём "в цикле" передаёшь файл.. я тестировал на >2Gb.. естественно, в коде что я привёл - всё упрощено. А со вторым сокетом - будет то же самое, я не понимаю, зачем он.. Да и, ты сам этого не представляешь, насколько я понял.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2011, 10:29:18 |
|
||
|
Обмен файлами, два сокета
|
|||
|---|---|---|---|
|
#18+
bezb, а что посоветуете почитать по java.nio? Вот нашел http://habrahabr.ru/blogs/java/70690/ на русском, но, там как-то сумбурно все. Наверное твой код то, что мне и надо, но, мне нужно в этом лучше разобраться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2011, 13:33:37 |
|
||
|
Обмен файлами, два сокета
|
|||
|---|---|---|---|
|
#18+
Diego Viajeroчто посоветуете почитать по java.nio?Возьмите HttpCore и углубитесь в реализацию собственных хотелок, но без (излишнего) погружения в сокеты и прочий транспорт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2011, 14:45:43 |
|
||
|
Обмен файлами, два сокета
|
|||
|---|---|---|---|
|
#18+
bezbDiego Viajero хоть большие, хоть маленькие в том месте создаёшь отдельный thread и в нём "в цикле" передаёшь файл.. я тестировал на >2Gb.. естественно, в коде что я привёл - всё упрощено. А со вторым сокетом - будет то же самое, я не понимаю, зачем он.. Да и, ты сам этого не представляешь, насколько я понял.. "bezb" с того места где вы говорите о передачи файла, можно о нём по подробней пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2012, 11:05:46 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37225960&tid=2132166]: |
0ms |
get settings: |
15ms |
get forum list: |
26ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
50ms |
get topic data: |
19ms |
get forum data: |
5ms |
get page messages: |
84ms |
get tp. blocked users: |
3ms |
| others: | 340ms |
| total: | 554ms |

| 0 / 0 |
