Что нового

Передача изображения (TCP)

Dream-52

...
Сообщения
82
Репутация
1
Уважаемые гуру,не подскажите как передать изображение через TCP ? :wacko:
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Считывать изображение как обычный файл по определенному колличеству байт FileRead.
И передовать (клиент-серверное решение) TCPSend.
Примеров в справке будет достаточно, что бы выполнить задачу.
 
Автор
D

Dream-52

...
Сообщения
82
Репутация
1
`p r o x y сказал(а):
Считывать изображение как обычный файл по определенному колличеству байт FileRead.
И передовать (клиент-серверное решение) TCPSend.
Примеров в справке будет достаточно, что бы выполнить задачу.
Можно пару не больших вопросов)) Если я верно понимаю - считываем в бинарном режиме.Передаем.Но,интерсует вот что,можно ли както в онлайн режиме просматривать то,что мы уже приняли? например пару пакетов - уже смотрим.Тоесть обновление идет по мере поступления пакетов.Единственное что не понимаю - как это выводить на экран....
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Хмм, примерно это выглдит так:

1. Клиент-сервеный вариант подразумевает, что клиент - только передает, сервер - только принимает.
Для двухсторонней реализации, необходимо, запускать на каждом ПК и клиент и сервер.

2. Клиентский скрипт считывает содержимое файла, разбивает его на блоки по N-символов/байт, передает серверу:
* посылает команду, что начинается передача файла, название файла, размер файла
* получает ответ готовности приема
* отправляет 1-ый блок данных
* ожидает ответ о приеме
* получает ответ готовности
* отправляет 2-ой блок данных
* ожидает ответ о приеме
* получает ответ готовности
...
* отправляет поледний блок данных
* ожидает ответ о приеме
* получает ответ готовности
* отправляет команду завершения передачи файла

3. В этот момент у сервера уже есть все отправленные блоки файла, которые он сохраняет в хронологическом порядки в файл.
Для верности еще правильно было бы проверять размер итогового файла на совпадение с данными о файле полученными от клиента.


Подобная тема уже обсуждалась.
 
Автор
D

Dream-52

...
Сообщения
82
Репутация
1
`p r o x y сказал(а):
Хмм, примерно это выглдит так:

1. Клиент-сервеный вариант подразумевает, что клиент - только передает, сервер - только принимает.
Для двухсторонней реализации, необходимо, запускать на каждом ПК и клиент и сервер.

2. Клиентский скрипт считывает содержимое файла, разбивает его на блоки по N-символов/байт, передает серверу:
* посылает команду, что начинается передача файла, название файла, размер файла
* получает ответ готовности приема
* отправляет 1-ый блок данных
* ожидает ответ о приеме
* получает ответ готовности
* отправляет 2-ой блок данных
* ожидает ответ о приеме
* получает ответ готовности
...
* отправляет поледний блок данных
* ожидает ответ о приеме
* получает ответ готовности
* отправляет команду завершения передачи файла

3. В этот момент у сервера уже есть все отправленные блоки файла, которые он сохраняет в хронологическом порядки в файл.
Для верности еще правильно было бы проверять размер итогового файла на совпадение с данными о файле полученными от клиента.
Спасибо,как не странно,разобрался и сам ..)))))))))))))))))))) Тему оставлю решеной,когда выложу свое решение (просто теорию проверил - да,работает то,что я думал) .


Добавлено:
Сообщение автоматически объединено:

Единственный вопрос еще такой - как правильно обновлять окно,которое отображает картинку? Поясню - логично будет так - Пришел первый пакет (например 15кб) и этот пакет заменяет 15 кб того изображения,что уже есть (визуально мы видим) . И так далее. Тоесть на выходе мы получаем на картинку за картинкой,а обновление самого тела картинки.Написал конечно очень туго,но суть думаю ясна... 8)
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Т.е. как в браузере грузится изображение большого размера?
В этом случае, необходимо "копать" функции _GDIPlus*.
Какая именно, не в курсе, не разирался.
Либо "топорный метод" - при каждом получение пакета, сохранять все пакеты
файла в файл на диске и уже обновлять в окне программы.
 
Автор
D

Dream-52

...
Сообщения
82
Репутация
1
`p r o x y сказал(а):
Т.е. как в браузере грузится изображение большого размера?
В этом случае, необходимо "копать" функции _GDIPlus*.
Какая именно, не в курсе, не разирался.
Либо "топорный метод" - при каждом получение пакета, сохранять все пакеты
файла в файл на диске и уже обновлять в окне программы.
Нашел такой пример :

Код:
#include <GuiConstantsEx.au3>
#include <GDIPlus.au3>
#include <ScreenCapture.au3>
#include <WinAPI.au3>

;~ Opt('MustDeclareVars', 1)

$hGUI = GUICreate("GDI+", 800, 800)
GUISetState()

While 1

	 Local $hGUI, $hBMP, $hBitmap, $hGraphic
	; Capture upper left corner of screen
    $hBMP = _ScreenCapture_Capture ("", 0, 0,-1,-1)   
    ; Initialize GDI+ library
    _GDIPlus_Startup ()
    ; Draw bitmap to GUI
    $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP ($hBMP)
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hGUI)
    _GDIPlus_GraphicsDrawImage ($hGraphic, $hBitmap, 0, 0)

    ; Clean up resources
    _GDIPlus_GraphicsDispose ($hGraphic)
    _GDIPlus_ImageDispose ($hBitmap)
    _WinAPI_DeleteObject ($hBMP)

    ; Shut down GDI+ library
    _GDIPlus_ShutDown ()
    Sleep(10000)

Until GUIGetMsg() = $hGUI_EVENT_CLOSE

WEnd


Только не могу понять,как мне передать картинку ? я так понимаю картинку "делает" _GDIPlus_GraphicsDrawImage ?
 
Автор
D

Dream-52

...
Сообщения
82
Репутация
1
ну что,не ужели никто ничего не подскажет ... :(
 
Автор
D

Dream-52

...
Сообщения
82
Репутация
1
qsort сказал(а):
Так, а подсказать то, что?.. Если по этому примеру, так, вроде, уже и сам разобрался. Кстати, на глаз, он даже и запуститься не должен, чего-то Do там не проглядывается...
А по теме "передать изображение через TCP" это ж надо еще догадаться, что имеется в виду, поскольку "через TCP" изображения передаются точно таким же образом, как и все другое. Для благородного семейства протоколов TCP все равно, что они там передают, что исполняемый файл, что изображение, что натюрморт, что обнаженная натура - все едино...
Т.е. просто берем в справке все функции начинающиеся на TCP и смотрим, чего с ними можно сделать. Могу сразу сказать, что функций по типу _TCPSendImage() - нету.
Проблема в том,что не знаю как динамичесски обновлять картинку,а не целиком пока прийдет..
 

Viktor1703

AutoIT Гуру
Сообщения
1 535
Репутация
410
Здесь есть хорошие примеры от Yashied'a , может это вам нужно?
 
Верх