[ salvaric @ 19.11.2012. 08:26 ] @
Pozdrav,

imam problem sa slanjem i prijemom podataka, server-client, komunikaciju radim pomoću indy 10 ftp komponente, naime, u većini slučajeva sve bude ok, al nekad se zakuca client prilikom slanja/prijema podataka i ništa bez Ctrl+Alt+Del.
Program je rađen u Delphi 7. Fajlovi su svi zipovani prije slanja i prijema tako da su jako mali da bi oni napravili neki problem. Client aplikacije se nalaze na laptopovima i koriste telenorov usb internet, dok je server povezan sa telekomovim adsl-lom.
Operativni sistem na svim računarima je Win 7, na clientima starter a na serveru Home Basic, mada mislim da to nema nikakve veze sa problemom.
Funkcija za slanje i prijem:
1.Konektovanje na server
2.Prijem podataka
4.Diskonektovanje sa servera
1.Konektovanje na server
3.Slanje podataka
4.Diskonektovanje sa servera
Dal možda pravi problem što se više puta u jednoj funkciji vrši povezivanje i raskid veze sa serverom il šta već?
[ anon295157 @ 19.11.2012. 08:48 ] @
Bez koda je tesko reci. Da li je thread-ovana aplikacija?
[ salvaric @ 19.11.2012. 09:11 ] @
Code:

            Status.Panels.Items[2].Text:='Provera veze sa serverom...';
            Update;
            f.Host := Opcije.ServerHost.Text;
            f.Username := Opcije.ServerKIme.Text;
            f.Password := Opcije.ServerLozinka.Text;
            f.Connect;
            sleep(100);
            f.changedir(Opcije.ServerDirTransfera.Text+'/Prijem/');
            if f.Size(ADORadneJediniceoznaka.AsString+'.zip') > 0 then
               begin
                 MessageDlg('Na serveru se nalaze neraspakovani podac transfera, molimo vas da kontaktirate administratora!',mtWarning,[mbOK],0);
                 Status.Panels.Items[2].Text:='';
                 f.Disconnect;
                 abort;
               end;
            f.Disconnect;
            Status.Panels.Items[2].Text:='Veza sa serverom je ispravna...';
            sleep(100);
         end;

         // Slanje i prijem podataka
      if (Sinhronizacija.SlanjePod.Checked) and (Opcije.ServerTipKlient.Checked) then
         begin
            Status.Panels.Items[2].Text:='Povezivanje na server...';
            Update;
            f.Host := Opcije.ServerHost.Text;
            f.Username := Opcije.ServerKIme.Text;
            f.Password := Opcije.ServerLozinka.Text;
            f.Connect;
            Status.Panels.Items[2].Text:='Slanje podataka...';
            Update;
            f.changedir(Opcije.ServerDirTransfera.Text+'/Prijem/');
            ADORadneJedinice.Locate('aktivan',true,[]);
            ProgressBar1.Max := GetSizeOfFile(ExtractFilePath(Application.ExeName)+Opcije.ServerDirTransfera.Text+'\Slanje\'+ADORadneJediniceoznaka.AsString+'.zip');
            ProgressBar1.Position :=0;
            f.Put(ExtractFilePath(Application.ExeName)+Opcije.ServerDirTransfera.Text+'\Slanje\'+ADORadneJediniceoznaka.AsString+'.zip');
            Status.Panels.Items[2].Text:='Brisanje fajlova...';
            Update;
            DeleteFile(ExtractFilePath(Application.ExeName)+Opcije.ServerDirTransfera.Text+'\Slanje\'+ADORadneJediniceoznaka.AsString+'.zip');
            f.Disconnect;
         end;
    if (Sinhronizacija.SlanjePod.Checked) and (Opcije.ServerTipKlient.Checked) then
         begin
            Status.Panels.Items[2].Text:='Povezivanje na server...';
            Update;
            f.Host := Opcije.ServerHost.Text;
            f.Username := Opcije.ServerKIme.Text;
            f.Password := Opcije.ServerLozinka.Text;
            f.Connect;
            Status.Panels.Items[2].Text:='Prijem podataka...';
            Update;
            f.changedir(Opcije.ServerDirTransfera.Text+'/Slanje/');
            if f.Size(ADORadneJediniceoznaka.AsString+'.zip') > 0 then
               begin
                  ProgressBar1.Max:=f.Size(ADORadneJediniceoznaka.AsString+'.zip');
                  ProgressBar1.Position:=0;
                  f.Get(ADORadneJediniceoznaka.AsString+'.zip',ExtractFilePath(Application.ExeName)+Opcije.ServerDirTransfera.Text+'\Prijem\'+ADORadneJediniceoznaka.AsString+'.zip');
                  f.Delete(ADORadneJediniceoznaka.AsString+'.zip');
               end;
            f.Disconnect;



[Ovu poruku je menjao savkic dana 19.11.2012. u 14:28 GMT+1]
[ savkic @ 19.11.2012. 13:33 ] @
> imam problem sa slanjem i prijemom podataka, server-client, komunikaciju radim pomoću indy 10 ftp komponente, naime, u većini slučajeva sve bude ok, al nekad se zakuca client prilikom > slanja/prijema podataka i ništa bez Ctrl+Alt+Del.

Ti na početku radiš i proveru veze tj. opet ide connect/disconnect. Po kodu se u jednoj metodi tri puta radi povezivanje/diskonektovanje, ne znam da li to pravi problem ali svakako je nepotrebno, konektuj se na početku, uradi sve što treba (primi, pošalji) pa se diskonektuj.
Gde se tačno desi problem, tj. gde se progam zaglupi?
[ komplikator @ 19.11.2012. 14:57 ] @
Pomaže li IdAntifriezze na formi i/ili Application.Processmessages ?
[ anon295157 @ 19.11.2012. 15:54 ] @
Evo zvanicnog Indy 10 ftp client primera:
http://www.indyproject.org/DemoDownloads/Indy_10_FTPClient.zip
Primer za server:
http://www.indyproject.org/DemoDownloads/Indy_10_FTPServer.zip
[ reiser @ 19.11.2012. 16:40 ] @
A mozes i OverbyteICS pack da koristis umesto Indy-a (www.overbyte.be)
[ salvaric @ 20.11.2012. 07:16 ] @
Zhavaljujem se na pomoći, izmenio sam kod i stavio jednu konekciju/diskonekciju pa sam instalirao ponovo program na client računare pa ću da ispratim dal će doći do greške.

Šta se dešava kad se na server u isto vreme nakači više client aplikacija i vrše transfer podataka, dal postoji neki način da se postave prioriteti il izvrši provera prije slanja dal je server zauzet?
Možda je u tome problem, pošto većina client aplikacija šalje podatke u isto vreme. Dal ima neko neki predlog il rešenje za ovu vrstu problema?
[ savkic @ 20.11.2012. 12:50 ] @
> Šta se dešava kad se na server u isto vreme nakači više client aplikacija i vrše transfer podataka, dal postoji neki način da se postave prioriteti il izvrši
> provera prije slanja dal je server zauzet?

Pre nego pokuša da se poveže to ne može znati, Server npr. može odbiti vezu ako je preopterećen, ako radiš i Server onda je to lako ostvarljivo.
[ salvaric @ 29.11.2012. 10:22 ] @
Pozdrav,

nisam puno napredovao sa problemom, postavio sam connect na početku i disconect na kraju procedure al opet mi se javljaju greške prilikom slanja i prijema podataka sa servera. Mislim da je problem u tome što se u isto vreme nakači više client aplikacija i moja procedura za slanje/prijem napravi neki zez na serveru, vjerovatno zato što se menja direktorijum (sa f.changedir) u isto vreme, i server se zbuni (valjda) i zakuca. Nisam ranije imao iskustva sa ovim FTP komponentama, tako da teško mogu odgonetnuti u čemu je džidža. Kad pristupim sa jednog client računara, sve je ok, al kad se nakači više tu nastaje problem.

Dal postoji neki elegantniji način da se izvrši transfer podataka u jednom i drugom pravcu, a da ne dođe do pucanja?
[ savkic @ 29.11.2012. 16:21 ] @
> nisam puno napredovao sa problemom, postavio sam connect na početku i disconect na kraju procedure al opet mi se javljaju greške prilikom
> slanja i prijema podataka sa servera.

Koja tačno greška, zaglupi se klijent aplikacija? Gde tačno?

> (valjda) i zakuca. Nisam ranije imao iskustva sa ovim FTP komponentama, tako da teško mogu odgonetnuti u čemu je džidža. Kad pristupim sa jednog client računara,
> sve je ok, al kad se nakači više tu nastaje problem.

To ne sme uticati na FTP server, da li je to tvoj ftp server rađen u Delphiju ili si uzeo neki gotovi?

> Dal postoji neki elegantniji način da se izvrši transfer podataka u jednom i drugom pravcu, a da ne dođe do pucanja?

Preko TCP/IP veze.
[ salvaric @ 29.11.2012. 16:43 ] @
FTP server je u mojoj aplikaciji, ja sam ga napravio.

Koristio sam kontrole i operacije kao i u demo projektu koji sam našao na netu i po uzoru na njih napravio iste.
Indy 10 FTP Client Demo i
Indy 10 FTP Server Demo

Client se nekad zakuca kod slanja a nekad kod prijema, kreira fajl al ga ne kopira celog i tu se zakuca, na serveru ostane otvorena veza za tim clientom, i na njemu ne mogu izbrisati taj primljeni fajl sve dok ne resrartujem aplikaciju iako je client aplikacija prekinula vezu sa serverom, i kod clienta se ito tako kreira prazan fajl al ga ne kopira, zakuca se i može proći sat vremena i ništa neće da se desi.

Problem je što ja kod sebe ne mogu da natjeram clienta da to uradi da bi video grešku, jer kod mene radi sve kako treba, šalje i prime sve kako treba na server.

Ipak mislim da je nešto u vezi promene direktrijuma na serveru, al ne mogu da provalim kako da saniram.

Većina client aplikacija šalje/prima podatke u isto vreme, barem bi trebalo, pošto su instalirane u mp objektima koji rade do 8h i tad šalji izveštaje.
Od 10 jedna se zakuca, sad jel to slučajnost da su vremenski razdvojene tih 9 konekcija pa sve ide kako treba a jedna se poklopila sa nekom od tih ne mogu da provalim. Kad je sve OK slanje/prijem traje najduže 10 sekundi.

[Ovu poruku je menjao salvaric dana 29.11.2012. u 17:54 GMT+1]
[ savkic @ 29.11.2012. 20:55 ] @
> FTP server je u mojoj aplikaciji, ja sam ga napravio.

> Koristio sam kontrole i operacije kao i u demo projektu koji sam našao na netu i po uzoru na njih napravio iste.
> Indy 10 FTP Client Demo i
> Indy 10 FTP Server Demo

Savetujem ti da privremeno zameniš tvoj FTP server sa nekim besplatnim FTP server programom, ima ih dosta, tako ćeš utvrditi gde je problem u tvom server kodu ili u mobilnoj internet vezi.

> Client se nekad zakuca kod slanja a nekad kod prijema, kreira fajl al ga ne kopira celog i tu se zakuca, na serveru ostane otvorena veza za tim clientom, i na njemu
> ne mogu izbrisati taj primljeni fajl sve dok ne resrartujem aplikaciju iako je client aplikacija prekinula vezu sa serverom, i kod clienta se ito tako kreira prazan fajl al ga ne
> kopira, zakuca se i može proći sat vremena i ništa neće da se desi.

Trebalo bi da postoje neki timeouti koji se mogu podesiti u FTP komponentama tako da se veza brže prekine.
[ salvaric @ 20.04.2013. 10:35 ] @
Pozdrav društvo,

dosadan sam sa ovim, al moram da rešim nekako.

Dal postoji neki način da server pošalje poruku clientu u trenutku kad se client konektuje na njega da je zauzet u koliko je drugi client nakačen na njega, da ubacim while petlju za za neki interval koji će proveravati server dok se ne oslobodi,pa onda tek put i get komande na clientu?
[ savkic @ 20.04.2013. 11:37 ] @
> Dal postoji neki način da server pošalje poruku clientu u trenutku kad se client konektuje na njega da je zauzet u koliko je drugi client
> nakačen na njega, da ubacim while petlju za za neki interval koji će proveravati server dok se ne oslobodi,pa onda tek put i get komande na clientu?

Da li ti imaš kontrolu nad kodom servera? Prosto stavi da odbije novu konekciju ako već ima postojeću.