![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
передать файлЫ по TCP [D7, Win2k]
MORA © (2004-07-02 16:18:00)нужен код или накрайняк последовательность действий при передаче НЕСКОЛЬКИХ ФАЙЛОВ с помощью компонентов TCPxxx.
Я написал прогу, она передает нормально файлы до 8 Кб, а больше -- передает мусор. Пример брал из делфовых примеров (NetChat).
При передаче я использую вызовTcpClient.SendStream(fs);
При приёме в обработчике OnAccept - ...fs.WriteBuffer(Buffer^, FSize);
Rouse_ (2004-07-03 12:23:00) [1]проще использовать WinSock API а именно TransmitFile именно для этого и предназначенную...
MORA (2004-07-02 16:42:00) [2]Кстати, я ошибся в первом сообщ.:
при приёме:ClientSocket.ReceiveBuf(Buffer^, FSize);
MORA (2004-07-02 16:40:00) [3]дык я так и поступал. Для одного файла я передаю так:
1. буфер (SendBuf) (или строку (SendLn)), в к-ром(ой) лежит имя файла;
2. буфер (SendBuf), в к-ром лежит размер файла (для того, чтобы понять на принимающей стороне, какой буфер создавать);
3. буфер с собственно файлом.
----------------------
В той демке с чатом строки передавались SendLn, а принимались в цикле с проверкой на непустоту строки ()while s <> '' do...
Мне не нужно при приёме буфера принимать его частями или за чем-то следить? Такое впечатление, что пакеты по дороге теряются или сервер (TCPServer) не успевает их обрабатывать. В каждом OnAccept я создаю поток, разгребающий переданный ему буфер...
Digitman (2004-07-02 16:27:00) [4]
> Я написал .. мусор
бывает
> накрайняк последовательность
"накрайняк" для TCP один :
- устанавливается stream-oriented-коннект с TCP-сервером
- передаются данные(!!!!) ВНЕ зависимости от того, файл это или не файл, НЕСКОЛЬКО их или один-единственный ..
передается содержимое БУФЕРА В ВИРТУАЛЬНОЙ ПАМЯТИ, а не черт-те что под названием ФАЙЛ ... ЧТО в этом буфере и КАК оно туда попало перед передачей - флаг тебе в руки, это элемент творычества, никак явно не привязанный к термину "файл"