Показать сообщение отдельно
  #8  
Старый 17.11.2008, 19:47
Амон Амон вне форума
Прохожий
 
Регистрация: 09.11.2008
Сообщения: 14
Репутация: 10
По умолчанию

Цитата:
Сообщение от 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);
Если нет, значит надо придумать как. Мысль я тебе дал.
Ответить с цитированием