Newsgroup: it.comp.lang.delphi
Titolo: Socket e Rete Libera

Ciao a tutti avrei da chiedervi una cosa. Sto realizzando un programmino con
dei socket, dove invio dei file... Il problema è che il server da cui invio
i file non sa quando il file è stato del tutto inviato o no.
*************
Codice:
Server1.Socket.SendStream('prova.ttt', ...);  //Questo funziona
Server2.Socket.SendText('File Inviato'); //Ecco il problema, il server invia
il file, poi senza aspettare che il file sia stato inviato delphi prosegue,
dicendo di aver finito di inviare il file, chiudendo la connessione, con
conseguente perdita del file...
 C'è qualche modo per vedere se il server sta ancora inviando o ha finito???
Grazie ancora e ciao

 inviato delphi prosegue, dicendo di aver finito di inviare il file,
Non ho mai lavorato con i socket, ma credo che dovresti vedere se hanno
qualche evento tipo OnSuccess o simili, e solo lě dovresti dargli la
conferma.
--
Jax

devi usare un socket sincrono.
Bye
A.

Ho cercato OnSuccess, ma non c'č.
Cosa si intende invece per sincrono???

> Cosa si intende invece per sincrono???
La cosa è un po + complessa da implementare in quanto comporta l'uso di una
istanza di una classe che eredita a sua volta da TThread.
Pero, in questo thread puoi scrivere una cosa del tipo:
  qualcosa := leggidalsocket(buffer, timeout)
Il thread legge se puo e mette cio che ha letto nel buffer.
Se va in timeout nella var qualcosa hai un valore che ti indica che la
lettura non è andata a buon fine.
Il tutto si basa sul fatto che il socket e stBlocking.
Se cerchi nella guida in linea trovi un piccolo esempio.
Infine, un consiglio.
Visto che in d7 i componenti TClientSocket e TServerSocket non vengono
installati di default e che mamma Borland invita a usare gli indy, se sei
all'inizio potresti migrare su questi che magari hanno qualche possibilità
in +.
Io lo fari ma ho 2 progetti tosti il cui funzionamento si basa su
TClientSocket e TServerSocket e modificarli ora sarebbe un suicidio.
baiBai
A

Infatti stavo provando anche a migrare verso questi componenti, mi sono
subito bloccato, infatti appena il client è connesso, uso un timer per
leggere con il comando ReadLn, il problema è che l'applicazione Freeza.
Dall'esempio della Chat, non riesco a capire come funziona anche perchè su
W98 funzia, su Xp Freeza... Non so dove reperire esempi. Sul sito degli Indy
dai tutorial non ho capito bene come funzionano, quindi...
Qualche idea???
Grazie e Ciao

 subito bloccato,
cioč...?
A.

Bloccato nel senso che per leggere quello che arriva dal client uso l'evento
onExecute del ServerIndy, ma in quello Client nn c'č niente, ho provato a
mettere un timer che ogni tot ms legge dal socket, ma freeza l'applicazione.
Non so come fare...
Suggerimenti???
Grazie e Ciao
Ps:- Scusate il ritardo nel rispondere ma ho formattato tutto ed ho avuto
alquanti intoppi nella gestione delle partizioni... Ora č OK

Frunktz wrote:

anche io sto provando a migrare verso gli indy ,un po difficilini direi!!!!
comunque per non far freezare l'applicazione c'č un componente nella
palette 'Indy Misc' che si chiama proprio 'antifreeze' ha come icona una
tanichetta di antigelo , dovrebbe essere comunque il secondo nella
palette. 
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it