как с помощью TCPSend/Recv передать файл, а не только текст?
или передать файл как текст, а на входе преобразовать обратно.. такое возможно?
[решено] Произвольные данные через TCPSend() / TCPRecv()
-
kaster
Re: [решено] Произвольные данные через TCPSend() / TCPRecv()
Intexid, передавать и принимать бинарные данные. чтобы передать
Код:
Отправка $xData[/i] по TCPSend($socker, $xData)
Прием
Код:
Код:
Код: Выделить всё
$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()
kaster,
Все работает!!!
а я то думал, это будет целая проблема..
пока только по частям передавать не получается, т.е. файл только целиком.
при указании $nData в файл пишет только первый кусок,
хотя на стороне клиента цикл вроде продолжается..
в связи с этим вопрос: существует ли ограничение на размер данных, отданный одним куском?
с какими флагами на стороне сервера принимать?: FileOpen(), FileWrite()
Все работает!!!
а я то думал, это будет целая проблема..
пока только по частям передавать не получается, т.е. файл только целиком.
при указании $nData в файл пишет только первый кусок,
хотя на стороне клиента цикл вроде продолжается..
в связи с этим вопрос: существует ли ограничение на размер данных, отданный одним куском?
с какими флагами на стороне сервера принимать?: FileOpen(), FileWrite()
-
kaster
Re: [решено] Произвольные данные через TCPSend() / TCPRecv()
Intexid, чесгря я знаком исключительно с концепцией реализации, которую сам написал постом выше. "своими руками" не пробовал. но мне кажется проблем быть не должно. в справке ограничения как таковой нет, но целесообразней и надежней (ИМХО) передавать все же небольшими кусками, особенно если файл большой. на стороне сервера (понял исключительно из контекста где сервер а где клиент) принимать надо по TCPRecv, если я правильно тебя понял. Чтобы записать нужно предварительно открывать файл на запись в бинарном режиме
Код:
и уже потом писать в него по хендлу. либо в конце приема-передачи записать аккумулируюшую переменную, либо в цикле записывать каждый кусок после приема.
скинь свой код, так будет понятнее, что уже сделано а что пропущено или надо дополнить
Код:
Код: Выделить всё
$hWrite = FileOpen($sPath, 2 + 16)и уже потом писать в него по хендлу. либо в конце приема-передачи записать аккумулируюшую переменную, либо в цикле записывать каждый кусок после приема.
скинь свой код, так будет понятнее, что уже сделано а что пропущено или надо дополнить
-
madmasles
Re: [решено] Произвольные данные через TCPSend() / TCPRecv()
kaster,
Если по частям записывать, то нужно не
Код:
а
Код:
Если по частям записывать, то нужно не
Код:
Код: Выделить всё
$hWrite = FileOpen($sPath, 2 + 16)а
Код:
Код: Выделить всё
$hWrite = FileOpen($sPath, 1 + 16)-
kaster
Re: [решено] Произвольные данные через TCPSend() / TCPRecv()
madmasles, нет. не обязательно. просто не надо хендл закрывать после записи. то что ты говоришь, это дописывание в файл после очередного открытия
-
madmasles
Re: [решено] Произвольные данные через TCPSend() / TCPRecv()
kaster,
Специально проверил. Я был не прав. Хотя, работает и так и так.
Специально проверил. Я был не прав. Хотя, работает и так и так.