| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Сокеты. Ошибка при приеме картинки |
| Автор: Misha_White 19.5.2007, 09:28 | ||||
| Проблема непонятная, но может кто встречался с таким... Я уже не могу ниче понять... Отправляю с клиента картинку каждые n сек... Первый раз принимается и отображается, а второй раз ругается при попытке загрузить Image из Стрима... Сервер:
Клиент:
Может поможет кто-нибудь Запускал на двух разных машинах, там на третий раз ругается... |
| Автор: Misha_White 19.5.2007, 13:48 |
| Обнаружил, что если ошибка появляется при третьем приеме, то ошибка возникает при попытке создать стрим... |
| Автор: MetalFan 19.5.2007, 14:49 |
| по приведенным кускам кода можно сказать только то, что кривовато они написаны. всё. |
| Автор: Misha_White 20.5.2007, 05:26 |
| MetalFan, В каком месте? |
| Автор: MetalFan 20.5.2007, 11:22 |
так что откуда отправляется? сначало написано, что с клиента, а код отправки указан, как "сервер". откуда вызывается Socket_Proc_Read_Close... откуда уверенность, что вызовы будут происходить в ожидаемой последовательности... + почему бы не использовать какой-нибудь Client/ServerSocket ? |
| Автор: Misha_White 20.5.2007, 12:00 | ||
| MetalFan, Все...
Если на данном сокете начнется передача данных от клиента, в главное окно приложения поступит сообщение NETEVENT_MSG. Это же сообщение поступит при разрыве соединения |
| Автор: aktuba 20.5.2007, 14:48 |
| Буквально недавно столкнулся с подобной проблемой. Три дня мучений ничего не дали. В итоге решил просто - поток создаю при создании формы и освобождаю при выгрузке формы... |
| Автор: Misha_White 20.5.2007, 16:08 |
| aktuba, И что, работает? А освобождаешь методом Free? |
| Автор: aktuba 21.5.2007, 08:24 | ||
Да, работает =))). Освобождаю при завершении программы чере Free =) |
| Автор: Misha_White 21.5.2007, 14:41 |
| aktuba, И правда работает... Только чистить надо Clear-ом... |
| Автор: aktuba 21.5.2007, 16:01 | ||
Так ты спрашивал как я освобождаю, а не чищу |
| Автор: Misha_White 22.5.2007, 02:24 |
| aktuba, Ну я понял... А че, Destroy не работает? |
| Автор: MetalFan 22.5.2007, 11:48 |
а это к чему? |
| Автор: aktuba 22.5.2007, 12:58 | ||
А вот вопрос: зачем тебе Destroy, если для этого есть Free? Да и вообще - лучше FreeAndNil... |
| Автор: Misha_White 22.5.2007, 13:04 |
| MetalFan, А это есть у TMemoryStream 2 метода Free и Destroy... А какой использовать? Добавлено через 13 минут и 51 секунду aktuba, Ну вот я и спрашиваю, что лучше использовать... |
| Автор: aktuba 22.5.2007, 16:54 | ||||
Я же сразу написал - FreeAndNil. Вот так:
|
| Автор: Misha_White 22.5.2007, 17:01 |
| aktuba, Т.е. эта процедура наглухо валит стрим? |
| Автор: aktuba 23.5.2007, 02:01 | ||
Эта процедура корректно убивает объект и обнуляет указатель на него. |
| Автор: Misha_White 24.5.2007, 12:48 |
| aktuba, Спасибо, А чем Destroy не канает? |
| Автор: aktuba 25.5.2007, 01:15 | ||
Во-первых, Destroy не проверяет объект на наличие (на nil), что делает Free. Во-вторых, ни Destroy, ни Free не присваивают указателю nil, что иногда бывает критично... |