Цитата:
Сообщение от NetWorker
Код:
//delphi here
Procedure net;
var
Outy : File of char;
BigRecy : array[0..4196] of char;
iRet : integer;
begin
// здесь идет реализация сокетов и прочая романтика,
// к делу относящаяся лишь посредственно
AssignFile (Outy, GetCurrentDir() + '\' + 'test.bin');
ReWrite(Outy);
while (iRet<>0) do
begin
iRet := Recv(sServerListen, BigRecy, length(BigRecy), 0);
if (iRet = 0) then
break;
BlockWrite(outy, BigRecy, 4196);
end;
close (Outy);
end;
|
Попробуй определять размер последнего принимаемого блока. У тебя стоит размер 4196 для всех. А если размер завершающего, положим, 2000... Получим 2196 байт мусора... вот и появляется в конце файлов невесть что.
Не пользовался приведёнными тобой функциями.
Если функция Recv возвращает размер принятого блока(у тебя помещает длина блока в переменную iRet) то в строке BlockWrite(outy, BigRecy, 4196); замени цифру 4196 на переменную iRet. Т.е. BlockWrite(outy, BigRecy, iRet);
Если нет, значит надо придумать как. Мысль я тебе дал.
