Newsgroup: it.comp.lang.visual-basic
Titolo: [?] far colloquiare + copie dello stesso sw

Ciao a tutti.
Ho un piccolo problema.
Vorrei poter caricare lo stesso applicativo su un certo
numero di macchine in rete (esempio solo su 4 PC in
una rete di 20 PC). Tutte accedono allo stesso DB.
Fin qui tutto ok, ma il problema consiste nel fatto che
nel mio applicativo esistono una serie di controlli tipo
listview e treeview che rappresentano graficamente
alcuni contenuti del DB, e io vorrei fare in modo che,
quando viene creato o cancellato un elemento, i vari
controlli anche delle altre copie del sw installate sugli
altri PC possano aggiornarsi.
Ho pensato ad inviare un messaggio con un certo
formato con protocollo UDP per avvertire gli altri di
effettuare in real-time l'aggiornamento del controllo
corrispondente ma mi piacerebbe farlo con un
messaggio di tipo broadcast, ovvero non inviato uno
per uno, ma inviato a tutti indistintamente: chi e' vivo
lo ascolta.
E' possibile inviare un messaggio cosi' ?
Potrei "parlare" agli altri tramite lo stesso DB, ma
la soluzione mi schifa un po' sia dal punto di vista
'etico' sia per il fatto che ogni macchina dovrebbe
pollare il DB in attesa di messaggi e questo è
inaccettabile.
Tenete presente anche che non e' detto che il sw
installato su 4 PC sia attivo sempre su tutte e 4,
qualcuna potrebbe essere spenta o non avere
lanciato il prog.
E infine non posso fare alcuna configurazione nelle
varie copie, devono fare tutto automaticamente.
Qualcuno di voi ha un'idea ?
Grazie mille !!
Beppe

 E' possibile inviare un messaggio cosi' ?
Tutto ciò, in tutta sincerità, mi spaventa (anche se lecito)! Lascia stare
l'eleganza e l'etica (ma che vuol dire?), pensa alla praticità e alla
gestione.


Non ti preoccupare, il sw funziona e anche alla grande.
Ma l'etica e la pulizia del codice e' *fondamentale*.
Sviluppo software da 26 anni e ho le mie idee, e
le difendero' finche' campo.
Sull'etica nello sviluppo non basterebbe un thread
apposta, ci vorrebbe un intero sito per accogliere
tutte le discussioni.   Ti posso solo dire che di
programmatori che scrivono 'basta che funzioni' ne
ho conosciuti davvero tanti.  Conosco i loro lavori,
si riconoscono anche senza guardare nel sorgente.
E conosco anche i loro clienti, che non ho avuto
difficolta' ad acquisire.
Comunque a me interessava sapere se e' possibile
inviare un messaggio broadcast.
Grazie
Beppe

 inviare un messaggio broadcast.
Non ti so rispondere, mi spiace.
Il tutto, ti chiedo di credermi, senza alcuna polemica.

 Il tutto, ti chiedo di credermi, senza alcuna polemica.
Figurati !  Il mondo e' bello perche' e' vario.  Ognuno ha le
sue idee.  ;-)
Ciao e grazie
Beppe

 Fa nulla. Tanto mi sa che non si puo'.
Ti arrendi un po' troppo presto :-)
Un Broadcast UDP può essere inviato usando l'indirizzo
"255.255.255.255", e ricevuto da qualunque Host UDP
in ascolto su quella porta.
Esempio per trasmettere:
*********
With Winsock1
.Protocol = sckUDPProtocol
.RemotePort = 2000
' ristretto alla sola subnet 10.112 in questo esempio.
' se vuoi un broadcast su TUTTA la subnet, usa 255.255.255.255
.RemoteHost = "10.112.255.255"
.SendData "Arturo è grande" & vbCr
.Close
End With
*********
Esempio per ricevere:
*********
With Winsock1
.Protocol = sckUDPProtocol
' questo è l'IP della macchina su cui ho fatto le prove
' ho dovuto usare il Bind su un IP perchè ho 3 IP in
' 3 classi diverse e 3 subnet, su questa povera bestia :-)
' probabilmente a te basta usare .Bind 2000
.Bind "2000", "10.112.1.63"
End With
*********
In Winsock1_DataArrival poi metti:
*********
Dim Test as String
Winsock1.GetData Test, vbString, bytesTotal
Debug.Print Test
*********
Tutto qui... ;-)
Bye, G.
--
Le risposte alle tue domande sono sul Sito Comune
di questo NewsGroup: 
http://it-lang-vb.net/
... e nell'help in linea !

 
Se la rete utilizzata e' TCP/IP vedi la risposta di paperino.
In caso contrario puoi usare le API mailslot.
vedi Createmailslot ...
Devi smanettare un po' con le API, magari creando un activeX che attende 
i messaggi (da installare su ogni PC) e poi comunica con l'applicazione 
principale ...
ciao
		maxx

 Ti arrendi un po' troppo presto :-)
Non mi sono mica arreso.  Infatti in attesa di nuove (forse
proprio le tue, adesso provo, grazie) ho pensato di recuperare
l'elenco delle macchine in rete e farmi un broadcast un po'
casereccio...
Grazie ciao
Beppe

 in ascolto su quella porta.
Uhm... l'indirizzo di broadcast non dovrebbe variare a seconda della
sottorete?
tipo per 10.*.*.* non dovrebbe essere 10.255.255.255 (cioè il valore più
alto compreso nell'intervallo degli indirizzi ammissibili stabilito con la
netmask dell'interfaccia)???
[...]
Snip, ora provo il codice postato al volo! Era parte di quello che cercavo
tempo fa! ;)
In pratica mi interessava trovare la lista dei server mysql che giravano su
una lan. Avevo pensato al broadcast, ma il problema era ed è ancora come
riconoscere se su una determinata porta girava un server mysql (eseguendo un
telnet sulla porta incriminata arrivano una serie di caratteri
icomprensibili e la versione di mysql).
Qualche idea? Per mssql ho risolto con un api di ODBC che ovviamente per
mysql non funziona! :(
Ciao

 netmask dell'interfaccia)???
Yep, era nel codice che hai CUTtato :-)
*********
' ristretto alla sola subnet 10.112 in questo esempio.
' se vuoi un broadcast su TUTTA la subnet, usa 255.255.255.255
.RemoteHost = "10.112.255.255"
*********
Ho fatto proprio quell'esempio perché in WAN usiamo una
classe 10.*.*.* come da RFC 1918, e nella LAN abbiamo il
10.112.eccetera. Come probabilmente fai anche tu, insomma :-).
Bye, G.

 10.112.eccetera. Come probabilmente fai anche tu, insomma :-).
btw si dato che 10.*.*.* č la piů facile di tutte da tenere a mente!
Un Lord Rayden Tie Fighter! |-O-|