[решено] Произвольные данные через TCPSend() / TCPRecv()

Ответить
Аватара пользователя
Intexid

[решено] Произвольные данные через TCPSend() / TCPRecv()

Сообщение Intexid »

как с помощью TCPSend/Recv передать файл, а не только текст?

или передать файл как текст, а на входе преобразовать обратно.. такое возможно?
Аватара пользователя
kaster

Re: [решено] Произвольные данные через TCPSend() / TCPRecv()

Сообщение kaster »

Intexid, передавать и принимать бинарные данные. чтобы передать



Код:

Код: Выделить всё

$hRead = FileOpen($sFile, 16); Флаг 16 - бинарное чтение файла
$xData = FileRead($hRead, $nData); Читаем данные по $nData - байт в цикле

Отправка $xData[/i] по TCPSend($socker, $xData)

Прием



Код:

Код: Выделить всё

TCPRecv($socket, $nData, 1); флаг 1 - Прием бинарных данных кусками по $nData
Аватара пользователя
Intexid

Re: [решено] Произвольные данные через TCPSend() / TCPRecv()

Сообщение Intexid »

kaster,

Все работает!!! Изображение

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



пока только по частям передавать не получается, т.е. файл только целиком.

при указании $nData в файл пишет только первый кусок,

хотя на стороне клиента цикл вроде продолжается..

в связи с этим вопрос: существует ли ограничение на размер данных, отданный одним куском?

с какими флагами на стороне сервера принимать?: FileOpen(), FileWrite()
Аватара пользователя
kaster

Re: [решено] Произвольные данные через TCPSend() / TCPRecv()

Сообщение kaster »

Intexid, чесгря я знаком исключительно с концепцией реализации, которую сам написал постом выше. "своими руками" не пробовал. но мне кажется проблем быть не должно. в справке ограничения как таковой нет, но целесообразней и надежней (ИМХО) передавать все же небольшими кусками, особенно если файл большой. на стороне сервера (понял исключительно из контекста где сервер а где клиент) принимать надо по TCPRecv, если я правильно тебя понял. Чтобы записать нужно предварительно открывать файл на запись в бинарном режиме



Код:

Код: Выделить всё

$hWrite = FileOpen($sPath, 2 + 16)

и уже потом писать в него по хендлу. либо в конце приема-передачи записать аккумулируюшую переменную, либо в цикле записывать каждый кусок после приема.

скинь свой код, так будет понятнее, что уже сделано а что пропущено или надо дополнить
Аватара пользователя
madmasles

Re: [решено] Произвольные данные через TCPSend() / TCPRecv()

Сообщение madmasles »

kaster,

Если по частям записывать, то нужно не

Код:

Код: Выделить всё

$hWrite = FileOpen($sPath, 2 + 16)

а

Код:

Код: Выделить всё

$hWrite = FileOpen($sPath, 1 + 16)
Аватара пользователя
kaster

Re: [решено] Произвольные данные через TCPSend() / TCPRecv()

Сообщение kaster »

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

Re: [решено] Произвольные данные через TCPSend() / TCPRecv()

Сообщение madmasles »

kaster,

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

Вернуться в «AutoIt»