Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Произвольные данные через TCPSend() / TCPRecv()

Ответить
Настройки темы
[решено] Произвольные данные через TCPSend() / TCPRecv()

Новый участник


Сообщения: 36
Благодарности: 6

Профиль | Отправить PM | Цитировать


как с помощью TCPSend/Recv передать файл, а не только текст?
или передать файл как текст, а на входе преобразовать обратно.. такое возможно?

Отправлено: 02:48, 10-07-2010

 

Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


Intexid, передавать и принимать бинарные данные. чтобы передать
Код: Выделить весь код
$hRead = FileOpen($sFile, 16); Флаг 16 - бинарное чтение файла
$xData = FileRead($hRead, $nData); Читаем данные по $nData - байт в цикле
Отправка $xData по TCPSend($socker, $xData)
Прием
Код: Выделить весь код
TCPRecv($socket, $nData, 1); флаг 1 - Прием бинарных данных кусками по $nData

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:32, 10-07-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 36
Благодарности: 6

Профиль | Отправить PM | Цитировать


kaster,
Все работает!!!
а я то думал, это будет целая проблема..

пока только по частям передавать не получается, т.е. файл только целиком.
при указании $nData в файл пишет только первый кусок,
хотя на стороне клиента цикл вроде продолжается..
в связи с этим вопрос: существует ли ограничение на размер данных, отданный одним куском?
с какими флагами на стороне сервера принимать?: FileOpen(), FileWrite()

Отправлено: 13:15, 10-07-2010 | #3


Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


Intexid, чесгря я знаком исключительно с концепцией реализации, которую сам написал постом выше. "своими руками" не пробовал. но мне кажется проблем быть не должно. в справке ограничения как таковой нет, но целесообразней и надежней (ИМХО) передавать все же небольшими кусками, особенно если файл большой. на стороне сервера (понял исключительно из контекста где сервер а где клиент) принимать надо по TCPRecv, если я правильно тебя понял. Чтобы записать нужно предварительно открывать файл на запись в бинарном режиме
Код: Выделить весь код
$hWrite = FileOpen($sPath, 2 + 16)
и уже потом писать в него по хендлу. либо в конце приема-передачи записать аккумулируюшую переменную, либо в цикле записывать каждый кусок после приема.
скинь свой код, так будет понятнее, что уже сделано а что пропущено или надо дополнить

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru


Отправлено: 13:55, 10-07-2010 | #4


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


kaster,
Если по частям записывать, то нужно не
Код: Выделить весь код
$hWrite = FileOpen($sPath, 2 + 16)
а
Код: Выделить весь код
$hWrite = FileOpen($sPath, 1 + 16)

Отправлено: 17:44, 10-07-2010 | #5


Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


madmasles, нет. не обязательно. просто не надо хендл закрывать после записи. то что ты говоришь, это дописывание в файл после очередного открытия

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru


Отправлено: 17:47, 10-07-2010 | #6


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


kaster,
Специально проверил. Я был не прав. Хотя, работает и так и так.

Отправлено: 17:53, 10-07-2010 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Произвольные данные через TCPSend() / TCPRecv()

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Данные абонента ][alter Мобильные ОС, смартфоны и планшеты 1 11-09-2009 17:27
HDD - Восстановить данные optima22 Накопители (SSD, HDD, USB Flash) 11 16-04-2009 15:36
MSFT SQL Server - Пропадают данные GROMOZEKA_TSP Программирование и базы данных 7 02-07-2008 23:29
Где данные? banshee Хочу все знать 10 19-10-2005 08:50
Учетные данные buffer26 Сетевые технологии 5 08-06-2004 21:13




 
Переход