Newsgroup: it.comp.lang.delphi
Titolo: Servizio TCP/IP in Delphi

Ciao
Vorrei realizzare un servizio basato su TCP/IP.
Tanto per capirci pensate ad un web server.
Mi sapete dire dove trovare del codice già fatto di esempio da cui partire?
Anche molto semplice purchè abbia la gestione del multithreading.
Grazie
Ciao
GG

 ha scritto nel messaggio
news:a4bhhu$6f8$1...@fe1.cs.interbusiness.it...


Mi piacerebbe sapere cosa viene fatto a "basso" livello (per quanto può
essere basso lavorare con i socket).
Soprattutto per un problema di sicurezza.
Sarà che mi piace reinventare la ruota, ma le cose di cui non conosco il
comportamento mi lasciano sempre un po' perplesso.
Grazie
Ciao
GG
"{MSX}" <nlugat...@THISinwind.it> wrote in message
news:eaca8.6954$tv6.1...@twister1.libero.it...


 comportamento mi lasciano sempre un po' perplesso.
dunque i server multithread funzionano piu' o meno cosi':
il processo principale crea il socket server, il quale esegue la primitiva
listen e in seguito la accept.
La accept blocca il processo finche' non arriva un tentativo di connessione.
A questo punto di solito viene accettata la connessione e creato un thread
per gestirla. Il thread separato gestisce la connessione, mentre quello
principale esegue un'altra accept (generalmente in un ciclo while) e si
rimette ad aspettare.
Quindi si ha thread che esegue il ciclo while principale con le accept, e
tanti thread quanti sono le connessioni attive. In molti casi e' necessario
sincronizzare questi thread, il che e' spesso un problema piu grande di
quello dei socket :D
Ecco un esempio del codice si un thread server:
procedure TServerThread.Execute;
var siz:integer;
    s:Tsocket;
begin
  while not Terminated do
   begin
    siz:=sizeof(Server.fsock);
    s:=accept(Server.ServerSocket,@Server.fsock, @siz);
    if s <> socket_error then
     begin
      server.CreaNuovoUserThread(s, GetIPFormTsockaddr(Server.fsock));
     end
    else
     Terminate;
   end;
end;
Come vedi e' un semplice while che continua ad aspettare connessioni e a
creare nuovi thread.
Il thread client e' solitamente un thread che ha tra i campi il proprio
socket e dei metodi per leggerci/scriverci, e termina quando la connessione
viene chiusa.
Se ti interessa ho scritto un componente Server che supporta il
multithreading, se vuoi te lo mando, ma e' del tutto simile a quelli che
trovi su indy o su fastnet.


Dal punto di vista teorico so come dovrebbe funzionare un server.
Tentavo di farlo con TserverSocket ma mi sembra di alto livello e temo che
mi sfugga qualche meccanismo "pericoloso".
Inoltre le classi TServerSocket e TClientSocket generano eventi e questo mi
complica un po' la vita.
Speravo in un esempio completo e funzionante per risparmiare un po' di tempo
nella comprensione e stesura del codice.
In alternativa mi metto sotto con API, MSDN, help Delphi e tanta pazienza.
Grazie
Ciao
GG

 In alternativa mi metto sotto con API, MSDN, help Delphi e tanta pazienza.
Vedi sopra.
Io ho realizzato un sistema client/server di comunicazione tra
applicazioni usando i semplici TServerSocket e TClientSocket.
Mai dato problemi.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Se vuoi possiamo lavorare insieme al mio server web
Tutto scritto a mano e funziona sia per Win che per Linux
Fammi sapere
Ciao
Mirko