Newsgroup: it.comp.lang.visual-basic
Titolo: Telnet ???

Buongiorno a tutti... spero che qualcuno di voi possa darmi una mano....
Dovrei aprire da un codice VB5 una sessione Telnet e ricevere poi
l'output del Telnet per il controllo remoto di una macchina.
In giro c'e' qualche tool ma forse qualcuno di voi ha gia' affrontato e
risolto il problema
Grazie
Michele Mastella
michele.mastrella$K$@$K$
allnet.it
per rispondere eliminare $K$


A che pro???? Perché non usi il controllo winsock, che altro non è che una
specie di telnet?
Ci vogliono due righe per farlo...
winsock.Connect <hostRemoto>, <porta>
winsock.SendData <comando> & vbCrLf
nell'evento dataArrival
Dim dati As String
winsock.GetData dati
in dati c'è lla risposta dell'host remoto al comando precedentemente
mandato.


Se devi comunicare con un server telnet Unix reale ti conviene pero'
anche leggerti le RFC riguardanti il Telnet e la negoziazione dei
parametri di configurazione della sessione.
Marco

olevo ringraziarti per il consiglio che mi hai dato sulle news di VB.
Ho usato direttamente Winsock e tutto sembra funzionare correttamente.
Buona Giornata
Michele Mastrella
PS. Ho qualche problema da risolvere per quanto riguarda la sincronizzazione
del metodo Connect.
In pratica non mi parte da una subroutine e a volte non mi fa partire l'evento
DataArrival... hai gia' affrontato il problema???



Cioč? Per la connessione devi attendere che il client abbia ricevuto una
risposta dal server prima di inviare i comandi, oppure specifichi un time
out:
Dim start As Single
winSk.Connect nomeServer, portaServer
start = Timer
While Timer < start + 10 And winSk.State <> sckConnected
    DoEvents
Wend
If winSk.State <> sckConnected Then
    DoEvents
    If frmMain.winSk.State <> sckClosed Then
            MsgBox "Impossibile connettersi al server"
            winSk.Close
    End If
End If
Tutta questa roba Serve per connettersi al server. Se dopo 10 secondi non si
connette, vuol dire che il server č down o non esiste.
Se invii comandi in successione che si aspettano una risposta dal server,
devi mettere una routine di ritardo che invia il comando successivo solo
quano il precedente ha vuto una risposta.
L'evento dataArrival viene generato ogni volta che arrivano dei dati. Metti
una varibile globale di tipo boolean che chiamerai Avanti.
nell'evento data arrival ci metti:
Dim dati As String
winS.GetData dati
Avanti = True
fai una Routine Delay:
Public Sub Delay()
    While Not Avanti
        DoEvents
    Wend
End Sub
quando invii un comando al winsock fai cosě:
Avanti = False
winS.SendData "Comando" & vbCrLf
Delay()
Avanti = False
winS.SendData "Comando successivo" & vbCrLf
Delay()
.....
etc etc
In questo modo la variabile avati viene messa su False. Il winsock invia al
server il comando, viene lanciata la routine delay che non fa niente fino a
quando non arriva qualcosa. Quando arriva un dato la variabile Avanti viene
settata su True, la routine Delay smette e il programma passa ad inviare il
comando successivo.
Tutta questa roba del delay non serve se i comandi li invii a mano come se
stessi usando telnet.
Ciao

Non so come mai il tuo ultimo mex e' sparito...
Comunque volevo ringraziarti, ho implementato e tutto funziona
perfettamente...
Il cliente e' pienamente soddisfatto.
Io pero' stavo provando ad eseguire connessioni parallele sullo stesso server
usando la proprieta index del winsock ma mi sembra che non funzioni.
Mi spiego meglio....
Mettere 5 controlli winsock che abbiano indice 0..4 e quando il l'ennesimo
indice risulta occupato uso l'ennesimo+1
Riesco a fare il controllo dell'ennesimo indice ma non riesco a fare la
connessione ne a catturare dati dal DataArrival(che non mi va in esecuzione).
Ne sai qualcosa???
Grazie comunque per i preziosi consigli.
michele mastrella



Mi sembra di avrti risposto via email.. ci avevo messo anche tanto per
scriverla O_O
1) Allora... metti un solo winsock di indice 0
2) quando carichi la form lo metti in listening
        winsock.LocalPort = 1000
        winsock.Listen
3) Nell'evento ConnectionRequest metti:
        if index = 0 then
            load winsock(ubound(winsock)+1)
            winsock(ubound(winsock)).Accept requestID
            winsock(0).Close
            winsock(0).Listen
        end if
Poi i dati in arrivo li gestisci tutti con l'index.
Ora che ci penso, il msg l'ho postato anche nel NG... fai una piccola
ricerca su 
www.dejanews.com
 per ritrovarlo.
Ciao