Newsgroup: it.comp.lang.visual-basic
Titolo: server TCP in VB

Siccome un mio amico mi ha riferito che i precedenti post sull'argomento non
li riesce a vedere, li riposto
Salve a tutti.
Questo thread è rivolto a tutti quelli che si sono messi a scrivere un
server tcp in visual basic.
Io ho fatto una applicazione molto complessa, ma ben divisa in base ai
compiti.
Uno di questi compiti è stare in ascolto su una porta Tpcip e attendere uno
o più client.
In pratica ho fatto un EXE/AX (in modo che fosse un thread a parte) che
viene chiamato dall'applicazione principale, mette a disposizione al
programma principale una "collection" per accodare messaggi e accetta
connessioni su una porta (ad es la 1000)
Quindi il Programma principale quando viene lanciato, crea l'oggetto (si
chiama MsgSrv) tramite:
set MsgSrv = createobject("StkMsgsrv.cMain")
la inizializza:
MsgSrv.init()
e successivamente quando vuole mandare un messaggio a tutti i client, accoda
in una collection un messaggio
MsgSrv.colMessaggi.add "Messaggio per tutti i client connessi"
Il MsgSrv ha un timer che ogni secondo prende i messaggi nella collection e
li distribuisce a tutti i client connessi.
Ovviamente All'interno quando accetta una connessione di un client, crea una
classe che è costretta a crearsi una form nella quale c'è un controllo
winsock, che gestirà la connessione tra il server e quel client, in modo da
avere + client connessi allo stesso momento.
Il fatto è questo:
I client, sono programmi che possono girare per ore e da quando vengono
avviati, si connettono al Server e "Devono" rimanere connessi fino a quando
non vengono chiusi.
In pratica si connettono e iniziano a vedere l'attività del Server, ma non
solo, possono anche mandare comandi e vedere come il server reagisce.
Una situazione del genere, tengo a sostenere, è molto critica.
Non so se ci sono problemi di rete a me incomprensibili o se è visual basic
che ogni tanto si cicca qualcosa, ma fino ad adesso provando tutto il
sistema su reti diverse ho sempre ottenuto strani effetti.
Ad esempio:
Ogni tanto nella routine del Timer del MsgSrv, sembra che si perda un
riferimento ad un oggetto e che quindi esca senza mandare i messaggi.
In una rete che aveva anche attivo un protocollo netbeui, la connessione si
autochiude in brevissimo tempo (2 o 3 secondi)
Ogni tanto un client si connette, ma poi non gli arrivano i messaggi
ecc...
Tutte con la stessa installazione e in ambienti diversi.
Se qualcuno ha già avuto problemi di questo tipo oppure sa cosa "NON SI PUò"
fare con il tcp o vb o tutti e due assieme, mi avverta, perchè sinceramente
prima di cambiare tutto il sistema di messaggistica, voglio almeno sentire
pareri diversi.
Nel caso che connessioni così lunghe non siano stabili, la mia idea era
quella di, in caso di comando da parte del client, aprire un socket, mandare
il comando, attendere risposta e chiudere.
Ma come potrei fare per tutti i messaggi che vengono spediti dal server ai
client, se quest'ultimi non sono connessi?
Grazie anticipatamente!
Maverick

Maverick wrote:

Ehm... io sono l'amico...
come mai non si vede il suo 3ad? Boh...
Ciao,
Mattia


 Non entro nel merito dei saltuari malfunzionamenti perchè bisognerebbe
vedere il codice, debuggare etc etc etc.
Però certo non è saggio tenere attive molte connessione contemporaneamente
per lungo tempo anche per una questione di risorse.
Cmq. per quanto riguarda la tua modifica potresti fare in modo che il client
sia anche server, cioè quando il client deve comunicare con il server si
connette, comunica e chiude.
Quando il server deve comunicare col cliente si connette al client comunica
e chiude insomma una sorta di P2P.
E chiaro che il server deve avere traccia dei client attivi per sapere a chi
è online in quel momento, ma questo si può risolvere facendo fare una sorta
di login/logout ai client.
Cmq cerca anche info riguardanti l'IPC.
Ciao
--------------------------------
Inviato via 
http://usenet.libero.it