Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Winsock: risoluzione nomi su LAN Ethernet

Ho postato la stessa domanda ca. due mesi fa, ma purtroppo le risposte che
ho ricevuto non mi hanno aiutato (grazie lo stesso :)
Il problema č il seguente: ho un'applicazione tipo client-server che
utilizza il controllo Winsock col protocollo TCP/IP per connettere il/i
client al server e scambiare le informazioni necessarie, il tutto su LAN.
Come funzioni il controllo Winsock lo so bene, avevo anche scaricato
l'esempio dal sito comune, tutto OK; l'unico problema sta (talvolta) nella
risoluzione dei nomi, ossia:
non potendo conoscere a priori l'indirizzo IP del server, il client
"chiama" il server mettendo nella propr. remoteHost (o come si chiama) il
NOME del computer.
Ho provato il progr. in ufficio, dove c'č Win 95-98 e una rete Ethernet
(NON c'č alcun server di rete, ma un HUB con connessione a stella); la rete
funziona benissimo sotto tutti gli aspetti (risorse condivise, ecc.), ma il
mio programma no: su alcuni PC della rete NON riesce a risolvere il nome
del server, e talvolta, quando tento di connettermi, appare la maschera di
Accesso remoto (???)
Ho provato a guardare nella configurazione della rete, ma non sono riuscito
a capirci un fico secco. Quel che ho visto č che in tutti i PC viene usato
il protocollo DHCP (eccheccosč???)
per la risoluzione WINS. Inoltre, talvolta, accendendo un PC, appare un
messaggio di errore DHCP (il testo del msg ora non lo ricordo bene), ma poi
la rete funziona benissimo comunque.
Mi č stato detto da piů persone di guardare il file HOSTS.SAM, ma non č una
strada valida per il mio problema. Come faccio dal cliente su cui dovrň un
domani installare il programma, vado ad editargli quel file?? e poi come
scegliere gli indirizzi IP?? Noo, non č assolutamente questa la strada: ci
DEVE essere un modo per tradurre automaticamente i nomi dei PC in indirizzi
IP!
Vi prego, aiutatemi!! Devo assolutamente consegnare il programma entro 15
gg., e se non riesco a testarlo in ufficio, come faccio a sapere se
funziona??
Nessuno di voi ha mai provato il Winsock su LAN senza server usando i nomi
dei computer?
-- 
Ale...@tiscalinet.it
http://web.tiscalinet.it/alexsode

 dei computer?
La traduzione dei nomi a indirizzi numerici viene fatta o da un server
DNS ( tipicamente installato sul server NT o altro tipo di OS presente
nella rete ) o dal file hosts ( di cui e' fornito una versione
'dimostrativa' col file hosts.sam ) in locale alla macchina, per cui non
si scappa da queste due soluzioni.
Per quanto riguarda winsock ,lui non ha vera coscienza dei nomi e degli
indirizzi numerici in quanto per fare le traduzioni si affida ( anzi si
DEVE affidare ) totalmente al sistema operativo.

 si scappa da queste due soluzioni.
Dunque sembra che il mio problema NON abbia soluzione: il server DNS non
esiste sulla mia rete, e non posso esser certo che esisterà neanche sulla
rete del cliente, e per quanto riguarda il file HOSTS è improponibile la
sua editazione su ogni pc che venisse usato come client, e ancor più
improponibile è richiedere una cosa del genere al cliente.
Eppure non riesco a spiegarmi un paio di cose:
1) Come mai su alcuni PC della rete il mio programma FUNZIONA (sempre se il
server è acceso :), malgrado non ci sia _una sola_ macchina in cui il file
HOSTS sia stato configurato per ottenere l'indirizzo del server? (per
"server" qui intendo il server della mia applicazione, non il server di
rete, che non esiste) Ovvero, su alcuni PC, winsock RIESCE ad ottenere
l'indirizzo IP del server e non appare neanche la maschera di Accesso
remoto
2) Che cos'è il protocollo DHCP, che sembra venga utilizzato per tradurre i
nomi dei computer in indirizzi numerici su TUTTI i PC della rete? Come
funziona questo protocollo, e perché su alcune macchine appare un messaggio
di errore relativo a questo protocollo?
3) Se mai decidessi di utilizzare il file HOSTS.SAM, con che criterio
dovrei scegliere l'indirizzo del server, da riportare poi su TUTTE le
macchine della rete ? Quale Net_ID scegliere, e quale Host_ID? A caso? O
c'è un criterio ben preciso?
Grazie per la disponibilità
-- 
Ale...@tiscalinet.it
http://web.tiscalinet.it/alexsode

 c'è un criterio ben preciso?
devi creare un file hosts ( e non hosts.sam ) in cui ci sono le coppie
nomi - indirizzi con gl'indirizzi che tovi nella configurazione del
TCP/IP delle varie macchine di cui vuoi fare la decodifica del nome ( in
pratica solo quella del tuo server )

 pratica solo quella del tuo server )
bene; dunque, se ho ben capito, dovrei innanzitutto "scrivere" sulla
macchina server un indirizzo IP nella configurazione di rete, al posto di
"ottieni automaticamente un indirizzo IP". E che indirizzo scegliere????
E poi, se il file non è hosts.sam, come si chiama? hosts.che cosa? E in che
directory si trova? O devo crearlo io dal nulla?
Mille grazie ancora
-- 
Ale...@tiscalinet.it
http://web.tiscalinet.it/alexsode

indirizzo IP"
stanno usando DHCP 
nel W9x c'e' il comando 'Winipcfg.exe' che ti da la configurazione
attualmente in uso del TCP/IP, attento a selezionare l'adattatore giusto
4) il file hosts si deve chiamare  "hosts" e basta ( senza le 
virgolette )
indirizzi che puoi scegliere sono 
indirizzo base 192.168.1.x ( x compreso tra 1 e 254 )
netmask        255.255.255.0
chiaramente ogni macchina deve avere un indirizzo differente
per provare la raggiungibilita' attraverso il TCP/IP il comando piu'
comodo e' 
ping <indirizzo_della_macchina>
o
ping <nome_della_macchina>
da prompt di dos

 virgolette )
...naturalmente :-)
E dove devo metterlo? Nella directory di Windows?
Mille grazie ancora !
-- 
Ale...@tiscalinet.it
http://web.tiscalinet.it/alexsode

 
dove si trova hosts.sam ( non ricordo dove )
ciao

 chi e' che fa questo ? io, io, io ........
ok, ma cosa dovrei *materialmente* fare da un PC qualsiasi della mia rete
per sapere quale altro PC è il server DHCP (se mai ce ne fosse uno) ?
..ancora mille grazie :)
P.S.
rileggendo tutto il thread mi è sembrato che il problema in origine si sia
un po' "perso" nel discorso, e quindi, a scanso di equivoci, faccio un
piccolo riassuntino, cercando di essere più specifico ove forse non sono
stato abbastanza chiaro:
nello sviluppare un'applicazione in *VB5-pro* tipo client/server, usando il
*controllo Winsock* 
(mswinsck.ocx) con il protocollo TCP/IP, ove il server e il/i client sono
su diversi PC di una LAN e su tutti i PC il S.O. è Windows 95 (o 98),
mentre non ho avuto *nessun* problema dal lato server (ove il progr. ha il
suo bravo Winsock in "ascolto" su una porta, e appena riceve una richiesta
di connessione crea una nuova istanza del controllo ecc. ecc. (cfr. esempio
su sito comune)), dal lato *client* ho avuto i seguenti problemi:
- metto nella proprietà RemoteHost il *nome* del computer server (così come
appare nella rete) e tento di connettermi; a questo punto accade una delle
seguenti cose:
1) la connessione ha successo, il server soddisfa la richiesta, a quel
punto client e server dialogano che è una bellezza :-)
2) appare la maschera di Accesso remoto (e già non mi sta bene); se clicco
su Annulla, il mio Winsock sul client non riesce a trovare il server :-(
Questo è il punto cruciale: alcune volte funziona, altre volte no, anche
sulla stessa macchina in diversi momenti della giornata, o in diverse
macchine nello stesso momento, e non sono riuscito a capire in quali
condizioni funzioni e in quali no !
Da qui gli interrogativi:
Problema di risoluzione dei nomi ?
Come funziona su una rete tipo LAN Ethernet (che è quella su cui ho potuto
provare il mio programma) ?
Configurazione TCP/IP sulle varie macchine ? (ma il TCP/IP è configurato
*identicamente* su tutte le macchine, dunque perché su alcune funziona e su
altre no ?  E poi, perché sulla *stessa* macchina, alcune volte sì, altre
volte no ? )
Oppure esiste un server (DHCP ?) che assegna gli indirizzi IP alle macchine
quando viene avviato Win, dunque quelle macchine hanno un indirizzo IP
assegnato solo se, al loro avvio, questo ipotetico server era acceso ?
Come fare per sapere *se* questo server esiste e *quale* è, visto che, da
come è configurata la rete, *non* esiste nessun server di rete
"dichiarato", e la rete, per quel che riguarda i normali servizi di rete
Micosoft (condivisione di file e stampanti, ecc.) funziona sempre
BENISSIMO, indipendentemente da quanti e quali PC siano accesi in un
determinato momento ?
Altre informazioni:
Configurazione fisica della rete: connessione a stella con un HUB
(assolutamente "stupido") che fa da centro stella. Nessun server, né NT né
altro.
Configurazione protocollo TCP/IP su tutte le macchine:
"Ottieni automaticamente indirizzo IP" e "uso di DHCP per risoluzione WINS"
-- 
Ale...@tiscalinet.it
http://web.tiscalinet.it/alexsode

 "Ottieni automaticamente indirizzo IP" e "uso di DHCP per risoluzione WINS"
e qui che sta il nocciolo del problema probabilmente ti convine
assegnare gl'indirizzi in maniera statica
per fare le prove puoi usare
INDIRIZZI 192.168.2.x  ( x che varia tra 1 e 254 per le varie macchine e
tutti ditinti tra loro !)
NETMASK   255.255.255.0
e crearti se proprio vuoi usare i nomi un file 'hosts' che copre le tue
necessita'.
va da se come ultimo commento che il programma client deve essere sempre
configurabile come RemoteHost in modo che fatta l'installazione sulle
macchine finali l'utente deve poter scegliere a chi connettersi ( mi e'
sembrato di capire che devi consegnare il programma ad un cliente e che
non e' per uso personale ) in quanto tu non puoi sapere a priori
l'indirizzo usato dal server se non quando vai a fare l'installazione.
Sarebbe bene che fosse settabbile anche la RemotePort in quanto, anche
se in misura inferiore, vale lo stesso discorso sulla disponibilita ( le
porte a maggior rischio sono quelle comprese tra 0 e 1024 )

 [...]
...sì, d'accordo, tutte queste cose le posso fare da me, in ufficio, ma dal
cliente non è proprio possibile, purtroppo :-(
Primo, perché l'azienda proprietaria del programma (che io sto realizzando
su commissione, ma che non distribuirò direttamente) non si prenderà mai la
responsabilità di modificare configurazioni *di sistema* del cliente, come
il protocollo TCP/IP o altro;
secondo, perché, ammesso e non concesso che questa responsabilità se la
voglia prendere, spesso il cliente non è disponibile a farti mettere le
mani su queste cose ("..e se poi non mi funziona più la rete, o non riesco
a connettermi a Internet, o... bla bla bla ?")
terzo, ammesso e non concesso che il cliente acconsenta, spesso è
*tecnicamente* complicato, se non impossibile, fare queste cose (prova ad
immaginare che cosa significa, in una grande azienda, chiedere a chi sta lì
il CD di Windows 95, spesso necessario quando si fa una modifica al
sistema: non sanno neanche dove cercarlo, ecc.)
quarto, nel 99% dei casi, non sarò neanche io a dover installare il
programma dal cliente, ma un tecnico dell'azienda, che non ha assolutamente
le capacità necessarie per configurare protocolli di rete o quant'altro su
PC, al massimo può eseguire l'installazione del software come una
"scimmietta" seguendo le istruzioni scritte (da me) su un foglietto; per
questo, l'installazione dovrebbe essere più "automatica" possibile, tipo:
inserisci il CD e segui le istruzioni in linea (che consisono al più in
qualche click del mouse). L'azienda, infatti, non tratta affatto software,
ma opera in tutt'altro campo; il programma che deve vendere serve come
"supporto" ad altri sistemi, di cui cura la manutenzione, dunque i tecnici
(che dovranno installare il programma dai clienti) sono specializzati in
tutt'altro campo che computer e Windows.
Peggio ancora sarebbe costringere il *cliente* ad eseguire le operazioni di
configurazione prima dell'installazione: quella è gente che non è
assolutamente in grado di farlo (immagina la segretaria che usa il computer
solo per scrivere lettere, e sa a malapena quali tasti premere per svolgere
sempre le stesse operazioni, e magari non sa cos'è un "file": siamo a quei
livelli lì!).
Dunque l'alternativa è usare, per il mio programma, un protocollo che
*sicuramente* funziona, perché è quello utilizzato dai servizi di rete
Microsoft (che si presume funzionimo dal cliente, altrimenti non ha senso
neanche vendergli il programma); tu dici che il protocollo utilizzato è il
NetBEUI: bene, perché non potrei utilizzarlo in un programma VB? Magari c'è
qualche OCX  da qualche parte.... nessuno ne sa niente?
Chiedo aiuto alla comunità :-)
-- 
Ale...@tiscalinet.it
http://web.tiscalinet.it/alexsode

 Chiedo aiuto alla comunità :-)
Di nuovo non so aiutarti