realbasic-nug.it
[Top] [All Lists]

Re: Shell

To: REALbasic NUG Italian <realbasic-nug dot it at lists dot realsoftware dot com>
Subject: Re: Shell
From: Matteo Cortonesi <m_cortonesi at ticino dot com>
Date: Wed, 15 Mar 2006 16:28:16 +0100
Delivered-to: realbasic-nug dot it at lists dot realsoftware dot com
References: <9C1EAED9-81F2-4513-9E19-35A4F90887F5 at libero dot it>
Accade questo perchè stai usando l'oggetto shell in modo non interattivo.

Praticamente REALBasic esegue il comando e diciamo (non ne sono sicuro) che appena riceve la prima stringa di risposta nel buffer chiude l'esecuzione del comando e mette la risposta nella proprietà Result. Quindi non c'è modo di effettuare una sessione telnet con un oggetto shell in modo sincrono.

Per utilizzare la shell in modo interattivo devi settare la proprietà Mode su 2:

Dim s as New Shell
s.Mode = 2

A questo punto puoi usare la shell esattamente come un TCPSocket.

Per scrivere qualcosa puoi richiamare il metodo "Write", non devi scordarti di aggiungere il carattere di ritorno a capo, chr(13), altrimenti il comando non viene eseguito.

s.Write "telnet www.google.com 80" + chr(13)

Quando c'è qualcosa nel buffer da leggere l'evento DataAvailable dell'oggetto shell viene attivato. Nell'evento DataAvailable puoi dunque leggere il buffer con ad esempio:

s.ReadAll

Per programmare l'evento DataAvailable ti occorre però creare una nuova classe di tipo "Shell". Cosa che forse può essere un po' difficile per te. Ti conviene di più trascinare nella finestra un Timer, e nell'evento Action scrivere:

Dim testoLetto as string
If s <> Nil Then
testoLetto = s.ReadAll
End if

dove "s" è un oggetto di tipo Shell.

Tutte queste informazioni si trovano nel manuale di REALBasic per la classe Shell.

Quello che non ti dice il manuale è che è un po' più complesso usare un oggetto shell per effettuare una connessione SMTP. Perchè sarebbe molto più semplice usare un'oggetto TCPSocket. Si tratta di un componente che ti permette di effettuare la connessione TCP/IP direttamente con un server. Mi sembra che ti avevo incluso un esempio di come usarlo nell'altro email.

Matteo

On 15-mar-06, at 16:04, ivano monti wrote:

Ciao a tutti quasi pronta la verifica email ma mi chiedevo una cosa curiosa perchè il comando shell execute si interrompe se simulo telnet...

ipotesi comando

invio un comando
s.Execute "telnet mail."+txtDominio.text+" 25"
leggo la shell
v = s.ReadAll
scrivo in finestra terminale il risultato
terminal.text = terminal.text+v+chr(13)

RISULTATO
Trying 193.70.192.50...
Connected to smtp.libero.it.
>>>>Escape character is '^]'. <<<<<<
>>>> Connection closed by foreign host. <<<<<<

INVECE DI
telnet mail.libero.it 25
Trying 193.70.192.50...
Connected to smtp.libero.it.
Escape character is '^]'.
220 smtp1.libero.it ESMTP Service (1.1.0-PF-CM) ready

Ivano Monti
Sviluppo Gestionali e installazione siti professionali
P.R. ©® http://ivanomonti.iyelloworld.com/
P.R. ©® http://iyelloworld.com/
Forum > Filemaker > Java > Realbasic > MySQL & Php
Shopping > Aperto agli sviluppatori che vendono on line

(e) ivanomonti at iyelloworld
(e) ivanomonti at iyelloworld dot com
-
(t) 029693379
(f) 029693379
-
Skype = ivanomonti
AIM = ivanomonti
iChat = ivanomonti
Yahoo = ivanomonti
ICQ =  200782119
-





<Prev in Thread] Current Thread [Next in Thread>