Этот топик читают: Гость
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 2 раз(а), последний 2025-01-10 23:23:12 |
|||
карма: 0 |
|
Ответов: 1088
Рейтинг: 112
|
|||
Забыл войти.
Весь день у меня война с TCP то данные передаются, но не принимаются, то вываливается Runtime ![]() ------------ Дoбавленo: Поправка: при аналогичных условиях, в другой схеме вываливается следующее: |
|||
карма: 0 |
| ||
файлы: 1 | tcpex.png [8.2KB] [332] |
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Sniper36, вообще-то сокеты в HiAsm работают в неблокирующем режиме и при отправке большого объема данный закрывать соединение сразу после doSend нельзя. У меня например при таком соединение даже 300 байт от boot.ini отправится не успевает. Без doClose все оправляется, приходит и работает с диалогом без ошибок
|
|||
карма: 27 |
|
Ответов: 1088
Рейтинг: 112
|
|||
Мда, и как же определить что файл отправлен?
|
|||
карма: 0 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Dilma писал(а): сокеты в HiAsm работают в неблокирующем режиме Неправда, я доделывал TSocked.Send, чтобы он посылал всё до конца, т.е. отправка там в цикле, до тех пор, пока не отправится всё. Проблема тут, как мне кажется, несколько иная: при отправке большого блока данных сообщения не обрабатываются, до тех пор, пока всё не отправится, и если принимает та-же программа, то я не уверен, что она не "проспит" сообщение о том, что данные пришли. Чтобы убедиться в этом надо разделить клиент и сервер на два приложения. Я так и не добился, чтобы TSocked.Send при блокировке отправки обрабатывал сообщения из очереди, поэтому в этой процедуре часть строк закомментирована. |
|||
карма: 1 |
|
Ответов: 1088
Рейтинг: 112
|
|||
Так будет изменен компонент или мне думать как обойти это?
|
|||
карма: 0 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Sniper36 писал(а): Мда, и как же определить что файл отправлен?закрывать соединение надо на стороне принимающего, когда точно известно что файл принят. Отдающая сторона об этом узнает при возникновении onDisconnect |
|||
карма: 27 |
|
Ответов: 3851
Рейтинг: 159
|
|||
а если предполагается длительный сеанс, или это просто механизм?
|
|||
карма: 0 |
|
Ответов: 5227
Рейтинг: 587
|
|||
Dilma, помнится предлагалось реализовать передачу MT потоков, тогда наверно таких проблем не возникало бы
![]() |
|||
карма: 4 |
|
Разработчик
Ответов: 26212
Рейтинг: 2138
|
|||
andrestudio писал(а): помнится предлагалось реализовать передачу MT потоковА что, разве сейчас это сделать нельзя, при помощи компонента StreamArray ![]() |
|||
карма: 22 |
|
Ответов: 1088
Рейтинг: 112
|
|||
Вот вроде ошибка: попробуйте в примере SendFile.sha бросить на форму большой файл(более 15МБ), он отправится но не будет принят.
С этим как бороться? |
|||
карма: 0 |
|
Разработчик
Ответов: 26212
Рейтинг: 2138
|
|||
Sniper36 писал(а): С этим как бороться?Бить на части сам передающий поток. Ничего тут страшного нет. |
|||
карма: 22 |
|
Ответов: 3851
Рейтинг: 159
|
|||
nesco писал(а): Бить на частикакого размера? |
|||
карма: 0 |
|
Ответов: 1088
Рейтинг: 112
|
|||
nesco писал(а): Бить на части сам передающий поток. Ничего тут страшного нет.А нельзя это к компоненте сделать? Не хочется городить огород ради просто корректной доставки файла. |
|||
карма: 0 |
|
14