Newsgroup: it.comp.programmare.win32
Titolo: socket

Ciao a tutti, sono tornato dopo un bel pò di addio eh...
E son tornato con un pò di domandine sulle socket!!!
Innanzitutto: diciamo che ho creato un applicazione client e una server,
perfettamente funzionanti (non ci credete che io ce l'abbia fatta eh :o))
solo che funziona solo
se si connette un solo client!!!
se volessi connettere piu client ho già individuato e risolto un pò di
problemi, tranne:
1) Come faccio a sapere chi mi manda la stringa????
nel senso che, quando intercetto il messaggio FD_READ io devo fare la recv,
passandogli la SOCKET del client, e come faccio a sapere chi ha causato
questa FD_READ???
2) non c'è un modo per mandare messaggi: ad esempio come WM_PAINT.
3) come mando file anziche stringhe???
grazie mille ha chiunque mi aiutiii!!!!!!!
K

3) come mando file anziche stringhe???
ti crei un protocollo tuo e stabilisci le regole x mandare file
Antonio

> non ti viene passato nella callback l'handle che ha generato il msg???
umh... allora: io chiamo la funzione WSAAsyncSelect() dicendogli di
"informarmi" quando "socket[0]" manda un messaggio di tipo FD_READ e imposto
il msg che deve arrivare come MY_EVENT
nella wndproc intercetto quindi MY_EVENT e in lParam c'č FD_READ, ma
l'handle dov'č???? in wParam??? se si: č in formato SOCKET o HANDLE???
grazie mille!!

 wrote:
<cut>
ecco xché :) mi ricordavo qualcosa di una volta ..
x ogni socket devi avere la sua callback .. oppure in alternativa
fatti mandare un segnale un pò ... anomalo tipo definisci
MY_EVENT 30000 + valore socket
poi quando ti arriva l'evento ... riottieni il socket
facendo la sottrazione a MY_EVENT, oppure come parametro extra
usa un pò l'ingegno :) oppure fai come feci io ... creavo dei thread
che stavano in ascolto ognuno x ogni socket... un pò pesanti
ma funzionava
antonio

 3) come mando file anziche stringhe???
Prima risolvi il punto (2), dopo saprai risolvere senz'altro anche il
(3). :-)
--
Lorenzo

 3) come mando file anziche stringhe???
Grazie a tutti quelli ke mi hanno risposto: cmq il punto 1 l'ho risolto
facendo delle prove ed è veramente stupido: la socket viene effetivamente
passata in wParam, basta fare il casting (SOCKET) wParam e si ottiene la
socket ke ha generato il messaggio.
per il punto 3 invece, se ho capito bene, apro il file che dovrei
trasferire, lo leggo tutto e lo metto in una stringa, a questa stringa ci
aggiungo alcune cosine come nomefile ecc.ecc.
mando la stringa e una volta arrivata la scompongo ricostruendo il file
nell'altro pc.
giusto?? funge??
se è un file di testo io credo di si, ma ad esempio con un eseguibile,
funziona???

funziona???
e se il file é 20mb ?? che fai una stringa da 20mb ??
al massimo definisci una struttura e mandi quella di volta in volta...
attento a non superare l'mpu... 1532 byte per i modem se non vado
errato
Antonio

 errato
emh.. scusa potresti spiegare meglio?? la struttutra non deve superare i
1532??
cmq, lasciando perdere le dimensioni, funziona con qualsiasi tipo di file??
mi sembra strano ma se me lo dite mi fido!!!!

 e se il file é 20mb ?? che fai una stringa da 20mb ??
Per trattare file interi consiglio, anzichč leggerli, di mapparli in 
memoria e leggerli direttamente da lě. Molto piů veloce, e non stai a 
sprecare memoria per il buffer di lettura
-- 
 < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
     Don't stand, REACT!      version 0.0.18. C, C++ and ASM developers
                              and beta testers are welcome!

 errato
Si chiama MTU (Maximum Transmission Unit) e comunque il vincolo di cui
parli c'e` solo per gli UDP datagram, non per gli stream TCP.
--
Lorenzo