|
|
|
Передача разных файлов через Socket в неблокирующем режиме
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Знаю, вопрос избит, но всё же прошу помощи. Компонент TServerSocket/TClientSocket Сокеты в неблокирующем режиме Клиент отправляет: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Сервер принимает: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. В итоге небольшие (~до 3 Мб) файлы принимаются нормально, далее начинаются проблемы. Я пробовал даже просто прочитать пришедшую длину ReceiveLength и считать буфер в никуда. Это для того чтобы просто просуммировать все ReceiveLength при срабатывании события прихода данных. В итоге сумма всех ReceiveLength меньше чем длина ожидаемого файла. В какую сторону подумать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 00:01 |
|
||
|
Передача разных файлов через Socket в неблокирующем режиме
|
|||
|---|---|---|---|
|
#18+
юзай SendStream передавая в него TFileStream а принимаешь через ReceiveBuf. Логично же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 00:20 |
|
||
|
Передача разных файлов через Socket в неблокирующем режиме
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 00:24 |
|
||
|
Передача разных файлов через Socket в неблокирующем режиме
|
|||
|---|---|---|---|
|
#18+
Ну вот в лоб.. 200 Мб передает без проблем... Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 01:00 |
|
||
|
Передача разных файлов через Socket в неблокирующем режиме
|
|||
|---|---|---|---|
|
#18+
Спасибо большое всем откликнувшимся. Приём файла, как оказалось, шёл нормально. Намудрил с буферной передачей. С помощью SendStream всё заработало. Но всё-таки хочу запилить прогрессбар, поэтому буду разбираться. А пока факультативный вопрос на соображение, кому интересно: у меня есть свой TObject, содержащий все необходимые для передачи файла проперти. Также в нём же содержится TClientSocket и TFileStream. В конструкторе моего объекта это всё создаётся динамически. Механизм такой. Вызываем MyObject.OriginalName:='testfile.tmp'; MyObject.Send По этой команде ClientSocket цепляется к заранее известному хосту и в событии OnConnect отправляет всю необходимую инфу приёмнику. Приёмник отвечает одобрением текстовой строкой. В событии OnRead я ловлю эту строку, перевожу флаг моего объекта в режим Receiving:=True и начинаю отправлять файл. Когда приёмник принял весь файл он закрывает соединение. В событии OnDisconnect я хочу дестроить свой объект, но не получается. По отладчику вижу, что всё содержимое освобождается нормально, но потом управление возвращается в OnDisconnect, а собственно сокет я уже убил и лювлю исключение. Что посоветуете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 10:33 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=77&tid=2039621]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
283ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 601ms |

| 0 / 0 |
