Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Вниз

Передача файлов по сети   Найти похожие ветки 

 
ZeroSPiRiT   (2006-10-15 19:41) [0]

Имеется локальная сеть, на одном из компов висит сервак - TCPServer, на другом клиент - TCPClient.
Клиент должен отправлять серверу файлы, вот код для сервера:


procedure TForm1.fileserAccept(Sender: TObject;
 ClientSocket: TCustomIpClient);
const
 TIMEOUT = 1000;
 BUF_SIZE = 1024;
var
 buf: array [0..BUF_SIZE - 1] of Byte;
 file_size, read_current: Integer;
 read_total: Integer;
 FW :TFileStream;
 percent : integer;
 per : string;
 bu : real;

begin

 FW:=Tfilestream.Create("d:\Documents\" + oname,fmcreate);
 if ClientSocket.WaitForData(TIMEOUT) then
 begin
   if ClientSocket.ReceiveBuf(file_size, SizeOf(Int64)) = SizeOf(Int64)
then
   begin
     read_total := 0;
     form2.visible:= true;
     form2.Label2.Caption := oname;

     with FW do
     try
       while (read_total <> file_size) and ClientSocket.WaitForData(TIMEOUT) do
       begin
         read_current := ClientSocket.ReceiveBuf(buf, BUF_SIZE);
         Write(buf, read_current);
         Inc(read_total, read_current);
         bu := read_total/file_size*100;
         bu :=round(bu);
         per := floattostr(bu);

         percent := strtoint(per);
         form2.pr1.Position := percent;
         form2.Label3.caption := inttostr(percent) + "%";
          end;
       form2.pr1.Position := 0;
     form2.Label3.Caption := "0%";
     finally
     form2.visible := false;
     fw.Free;
    end;
   end;
 end;

end;

(нерационально, конечно :-))
Для клиента пишу так:


try

   with TFileStream.Create(filename, fmOpenRead) do
   try
     file_size := Size;
     cli.SendBuf(file_size, SizeOf(Int64));
     read_total := 0;
     while (read_total <> file_size) do
     begin
       read_current := Read(buf, BUF_SIZE);
       cli.SendBuf(buf, read_current);
       Inc(read_total, read_current);
       per := read_total/file_size*100;
       per := round(per);
       s := floattostr(per);
       percent := strtoint(s);
       l.Caption := s +"%";
       pr.Position := percent;
       Application.ProcessMessages;
     end;
   finally
   pr.Position := 0;
 
     Free;
   end;
  finally
   cli.Close;
   

end;

pr - это прогрессбар; а терь собсна вопрос: почему если передается первый файл, то всек проходит нормально, но в конце передачи вылезает access violation, а при передаче второго файла, исчезает прогрессбар?


 
kami ©   (2006-10-15 20:23) [1]

Трассировал код? Где именно AV ?
Честно - неохота смотреть код, но первые же замечания по клиенту :
cli.SendBuf(buf, read_current);
Inc(read_total, read_current);

Кто сказал, что отправится именно read_current байт? Где анализ значения, возвращаемого SendBuf?
Зачем это while (read_total <> file_size) do? Не проще ли использовать OnWrite (или как там оно в TCPClient называется? - не пользовался ими, предпочитаю TClient|ServerSocket)


 
zeroSPiRiT   (2006-10-15 20:31) [2]

OnSend что ли?

Но первый-то файл передается


 
kami ©   (2006-10-15 21:03) [3]

zeroSPiRiT   (15.10.06 20:31) [2]
Но первый-то файл передается

Но AV -то происходит :)


 
zeroSPiRiT   (2006-10-16 12:14) [4]

AV вылезает после того, как убирается форма2


 
Сергей М. ©   (2006-10-16 12:17) [5]


> zeroSPiRiT   (16.10.06 12:14) [4]
>
> AV вылезает


см. Search -> Find Error ..


 
zeroSPiRiT   (2006-10-16 15:58) [6]

Нету Search-Find Error :-) я начинающий, как проводить трассировку кода?



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.042 c
15-1158055308
VitV
2006-09-12 14:01
2006.10.29
Стоит ли передодить на С#?


2-1160551228
Zlodey
2006-10-11 11:20
2006.10.29
Работа с текстовым файлом


15-1160362661
Slider007
2006-10-09 06:57
2006.10.29
С днем рождения ! 8 октября


2-1160721685
alucard
2006-10-13 10:41
2006.10.29
Как сделать Таймер активирующийся по Вторникам и Четв. в 15:00


2-1160472952
horse
2006-10-10 13:35
2006.10.29
Как изменить языковую раскладку клавиатуры?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский