![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не получается правильно переслать файл по сети [D7, WinXP]
Yegorchic © (2006-03-02 00:30:00)Здравствуйте! Я пытаюсь переслать файл по сети таким способом:
Код программы-отправителя:
ms:=TMemoryStream.Create;
ms.Position:=0;
ms.LoadFromFile('file.cab');
IdUDPClient1.Active:=true;
IdUDPClient1.SendBuffer(ms, ms.Size);
Вот. Всё отправляется хорошо, вроде.
Код программы получателя:
procedure TForm1.Server2UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var ms: TMemoryStream;
begin
ms:=TMemoryStream.Create;
ms.LoadFromStream(AData);
ms.SaveToFile('file.cab');
...
end;
В результате, размер полученного файла правильный, а содержимое совершеннодругое, которое не ясно откуда взялось.
Что я сделал не так?
Yegorchic (2006-03-02 15:18:00) [1]Спасибо. Я кнужку, кстати, ещё давно списал, но подумал, что тут дело в это TMemoryStream...
Ну, вообщем, спасибо!
Eraser (2006-03-02 01:51:00) [2]
> Yegorchic © (02.03.06 00:51) [2]
вот для начала можешь почитать
http://podgoretsky.com/cgi-bin/dlcounter/npscnt?file=http://podgoretsky.com/ftp/Docs/Internet/IntroIndy/IndyInDepth.pdf&file_id=IndyInDepth
Eraser (2006-03-02 01:21:00) [3]
> Yegorchic © (02.03.06 00:51) [2]
> Я исправил (2), и у меня теперь вылезает "the package size
> is too big".
:-) ну вот это то, о чём я и предупреждал. Дословно - "размер пакета (дейтаграммы) слишком большой".
Грубо говоря, дейтаграмма - это пакет данных с каким-то ограниченным размером. В компонентах Indy по-умолчанию размер буффера 8192, в большенстве случаев это меньше размера дейтаграммы.
В твоём случае лучше применять TCP для передачи файла.
Лучше почитай литературу соотв. тематики, по сетям на базе TCP/IP.
Yegorchic (2006-03-02 00:51:00) [4]Извините, я ещё не сильно во всём это деле разбираюсь, но что такой "дейтаграмма"?
Я исправил (2), и у меня теперь вылезает "the package size is too big".
Размер файла примерно 60-70kb.
Eraser (2006-03-02 00:44:00) [5]
> Yegorchic © (02.03.06 00:30)
1. При отсылке через UDP размер буффера ограничен размером дейтаграммы.
2.
> IdUDPClient1.SendBuffer(ms, ms.Size);
IdUDPClient1.SendBuffer(ms.Memory^, ms.Size);