Newsgroup: it.comp.lang.delphi
Titolo: Socket senza Forms

ciao a tutti,
per cercare di ottimizzare le dimensioni del mio eseguibile, sono arrivato
ad un problema: come saprete, per diminuire brutalmente le dimensioni,
bisogna evitare di usare la unit Forms, e quindi creare finestre e tutto il
resto usando delle API. E fin qui non è tanto complicato... la complicazione
arriva se voglio includerci dei componenti, che nel mio vecchio progetto
erano dei componenti da includere nel form! Il mio problema è che per
gestire un server TCP utilizzavo il componente TServerSocket. Ora
naturalmente non posso più utilizzarlo... quindi c'è qualcuno che mi sa dare
un'alternativa che non necessiti di forms? Quello che devo fare è riuscire a
simulare in qualche modo i vecchi Socket.sendtext,receivetext,sendbuf,
receivebuf.
aiuto!! :)
grazie e ciao
Pibe

 aiuto!! :)
Perchè non riesci più ad utilizzarlo?? Solo perchè non puoi trascinarlo su
una TForm??
Puoi crearlo a manina :))
Aggiungi le unit necessarie (ScktComp) e per creare il componente fai
S:=TServerSocket.Create(nil);
Dovrebbe funzionare senza problemi.
ciao
Matteo

Grazie dell'aiuto, ora mi ripresento subito con un altro problema,
probabilmente legato alla mia scarsa conoscenza dell'uso degli oggetti...?
Beh, allora ho creato un componente socket in runtime, ci setto la porta, lo
attivo... ma poi il programma termina subito! :) Come faccio a dirgli di
rimanere lì fermo in ascolto, senza terminare tutto? Con le forms questa
cosa è normale, cioè il programma rimane in esecuzione finché non chiudo la
finestra... ma senza form come faccio?
Scusate se la domanda può sembrarvi molto banale... ma per me non lo è, sono
già 2 ore che mi scervello! :-/
grazie ciao
Pibe

Ciao
"Pibe" <pib...@hotmail.com-rimuoviquesto> ha scritto nel messaggio
news:Pjhs8.943$SR5....@twister1.libero.it...

Devi fare un ciclo repeat che rimane in attesa dei messaggi di windows.
quando riceve un messaggio di chiusura (WM_Close e via di seguito) allora il
ciclo deve uscire, deallocare tutti i componenti allocati (quindi anche il
socket server) e lasciar morire il programma con l'ultimo End.
Ciao
Matteo

 socket server) e lasciar morire il programma con l'ultimo End.
ciao, ci ho appena provato, ma... ottengo un programma che funziona sě...
cioč resta in ascolto sulla porta scelta, ma ha un'occupazione processore
sopra il 90%! :) In pratica il prog va in loop infinito finché non lo stoppo
io... forse non ho capito qualcosa di quello che mi dicevi?
grazie della pazienza, ciao!
Pibe

io... forse non ho capito qualcosa di quello che mi dicevi?
...e qui mi sorge spontanea una domanda: dal tuo punto di
vista, e' meglio fare tutto a manina e andare incontro a
tutti questi problemi o affidarsi a un framework come le VCL
?  Ne vale davvero la pena ? non sarebbe meglio compilare
comunque la propria applicazione con le VCL e poi comprimere
l'eseguibile con un compressore come UPX ?
-- 
Andrea Laforgia (
walkie...@libero.it
)
"Usenet is a strange place" [Dennis Ritchie]

 l'eseguibile con un compressore come UPX ?
beh Andrea, in effetti hai ragione, forse cerco qualcosa di troppo
complicato per me... ma il fatto è che questo programma, compilato
con le VCL mi occupa 600kb, e compresso con l'upx arriva a 250kb.
Lo stesso identico fatto in borland builder mi occupava si e no 80kb,
quindi volevo cercare di ottimizzare anche questo in delphi... ma
se mi dite che è troppo difficile, lascerò stare... che mi dite? :)
ciao Pibe

quindi volevo cercare di ottimizzare anche questo in delphi... 
La libreria alla base e' assolutamente la stessa, sia in
BCB, che in Delphi.  Sei sicuro che con BCB non stessi
compilando con i run-time packages ?  Bada che con BCB e'
l'impostazione predefinita.  Disabilitando i run-time
packages, le dimensioni dell'applicazione (con BCB 5)
diventano 316 Kb (ma bada che ho considerato un form senza
codice, ma con il solo componente TServerSocket).


 ciao, ci ho appena provato, ma... ottengo un programma che funziona
sě... cioč resta in ascolto sulla porta scelta, ma ha un'occupazione
processore sopra il 90%! :) In pratica il prog va in loop infinito
finché non lo stoppo io... forse non ho capito qualcosa di quello che mi
dicevi? <
Se proprio non vuoi usare la VCL puoi cmq sfruttarne il codice: dai
un'occhiata a come e' implementato Application.ProcessMessages (ciclo di
PeekMessage) e Application.DoIdle (chiamata in ciclo da
Application.Run).
cmq, trovo anch'io piu' consigliabile l'uso della VCL.
Saluti
Paolo Arosio

beh vi ringrazio dell'aiuto che avete provato a darmi, mi sa proprio che
continuerò a programmare il server con le VCL, come stavo facendo, e me lo
terrò anche se occupa un sacco di spazio... ho desistito dal mio intento di
implementare tutto senza forms, anche perché ho visto che avrei dovuto usare
alcune units che mi avrebbero comunque incrementato le dimensioni dell'exe,
e quindi... meglio così dai :)
ciao e a risentirci a presto... ho idea che dovrò chiedervi di nuovo aiuto
su qualcosa :)))
Pibe