Newsgroup: it.comp.lang.visual-basic
Titolo: Server Client

Salve a tutti!
Avrei bisogno di un consiglio circa le modalità di implementazione di un
pacchetto software in VB6 che mi è stato commissionato.
Ho la necessità di creare due programmini uno definibile di tipo SERVER ed
uno CLIENT.
Il programma SERVER deve risiedere su un server con un indirizzo IP reale ed
il CLIENT in postazioni remote fornite di collegamento ad internet. Dovrei
quindi riuscire a:
1) stabilire una connessione tra i CLIENTS e il SERVER (più CLIENTS ad un
SERVER contemporaneamente);
2) rendere possibilile l'inserimento da input di una serie di dati nel
programma SERVER;
3) consentire un trasferimento continuo , di tipo simplex, dei dati inseriti
dal SERVER Verso i CLIENTS;
4)visualizzare ed aggiornare continuamente nei CLIENTS i dati ricevuti dal
SERVER.
N.B.
nella velocità di inserimento-trasferimento-visualizzazione si dovrebbe
avvicinarsi il più possibile a "Tempo reale".
La cosa che mi è venuta subito in mente è la creazione di programmi di tipo
server-clients del tipo IRC, naturalmente in maniera più semplificata in
quanto in trasferimento deve essere solo unidirezionale (SERVER => CLIENTS).
Spero di avervi esposto chiaramente le mie esigenze e se qualcuno ha qualche
suggerimento da darmi ne sarei ben felice!! :))
Vi ringrazio anticipatamente!!

>dal SERVER Verso i CLIENTS;
Usando le socket su tcp/ip puoi attivare delle connessioni tra client e server e poi effettuare il trasferimento delle informazioni.
Cose di questo tipo in genere si fanno in C++ perche' con il multi threading gestisci meglio le molte chiamate al server.
In alternativa puoi realizzare degli oggetti COM che risiedono sul server e poi dal client configurare il COM dicendo su che macchina risiede (mai fatto ma si puo' fare, e' DCOM).
Il secondo problema che hai e' capire quali sono le informazioni nuove da spedire al singolo client. Ma questa e' un'alta storia...
Antonio

>dal SERVER Verso i CLIENTS;
        Usando le socket su tcp/ip puoi attivare delle connessioni tra
client e server e poi effettuare il trasferimento delle
informazioni.
        Cose di questo tipo in genere si fanno in C++ perche' con il multi
threading gestisci meglio le molte chiamate al server.
In questo caso l'utilizzo di threads diversi sarebbe inutile ( e addirittura
svantagioso ) infatti i dati sono sempre gli stessi da inviare a tutti i
clients e utilizzando threads diversi vorrebbe dire controllare la sincronia
sull'accesso ai dati.
Per come la vedo io (a dire il vero è una tecnica standard) puoi utilizzare
un array di controlli winsock e quando ti arriva una richiesta di
connessione, ne istanzi uno nuovo e chiami il metodo accept su questo nuovo
controllo.
ES.
Prima di capire il codice è necessario conoscere il controllo winsock
'Tieni conto che i è una variabile di modulo
Private Sub W_ConnectionRequest(Index As Integer, ByVal requestID As Long)
    i = i + 1
    Load W(i)
    W(i).Accept requestID
End Sub
per spedire i dati fai una procdura tipo:
sub SendData(stData as string)
    ' Inizio da 1 perchè l'elemento 0 rimarra sempre in ascolto facendo
eseguire le connessioni alle istanze successive.
    for iCount = 1 to i
        w(i).senddata stdata
    next
end sub
        In alternativa puoi realizzare degli oggetti COM che risiedono sul
server e poi dal client configurare il COM dicendo su         che macchina
risiede (mai fatto ma si puo' fare, e' DCOM).
Sono daccordo sull'uso di DCOM anche se (sempre che ho capito bene il
problema) mi sembrerebbe di usare una testata nucleare per uccidere una
mosca :)
Ciao Maurizio

>mosca :)
DCOM usa le socket su tcp/ip (o tecniche analoghe) per fare le richieste ne' piu' ne' meno di come fai tu con il controllo winsock.
Facendo un com hai il vantaggio di non dover gestire il protocollo di comunicazione.
Antonio

 ha scritto:
        >>3) consentire un trasferimento continuo , di tipo simplex, dei
dati inseriti
        >>dal SERVER Verso i CLIENTS;
        Usando le socket su tcp/ip puoi attivare delle connessioni tra
client e server e poi effettuare il trasferimento delle
informazioni.
        Cose di questo tipo in genere si fanno in C++ perche' con il multi
threading gestisci meglio le molte chiamate al server.
In questo caso l'utilizzo di threads diversi sarebbe inutile ( e addirittura
svantagioso ) infatti i dati sono sempre gli stessi da inviare a tutti i
clients e utilizzando threads diversi vorrebbe dire controllare la sincronia
sull'accesso ai dati.
Per come la vedo io (a dire il vero è una tecnica standard) puoi utilizzare
un array di controlli winsock e quando ti arriva una richiesta di
connessione, ne istanzi uno nuovo e chiami il metodo accept su questo nuovo
controllo.
ES.
Prima di capire il codice è necessario conoscere il controllo winsock
'Tieni conto che i è una variabile di modulo
Private Sub W_ConnectionRequest(Index As Integer, ByVal requestID As Long)
    i = i + 1
    Load W(i)
    W(i).Accept requestID
End Sub
per spedire i dati fai una procdura tipo:
sub SendData(stData as string)
    ' Inizio da 1 perchè l'elemento 0 rimarra sempre in ascolto facendo
eseguire le connessioni alle istanze successive.
    for iCount = 1 to i
        w(i).senddata stdata
    next
end sub
        In alternativa puoi realizzare degli oggetti COM che risiedono sul
server e poi dal client configurare il COM dicendo su         che macchina
risiede (mai fatto ma si puo' fare, e' DCOM).
L'utilizzo di DCOM è possibile anche se forse un po' superfluo.
Ciao Maurizio


... solo l'ultimo client collegato riceve i dati (che comunque sono giusti).