+1 vote
by (190 points)
edited

Hi,

I'm doing some automation and need to send the telnet session some keystrokes to log in and take me to a certain area. So, I can use the SendToServer method to send basic text and 'certain' function keys.

However, I need to send other keys, specifically the carriage return. I can do this by using SendKeys() in VB but I don't think that's the correct way to do it (I also think it's the root cause of some problems I'm having where the SendKeys() calls are being executed immediately when in fact the server may sometimes take 0.5 seconds to process them, thus any following code could be out of sync)

So, after all that, can I use the SendToServer method to send special keys such as carriage return and tab?

Thanks in advance Tom

1 Answer

+1 vote
by (70.2k points)
edited
 
Best answer

Hello Tom,

yes, you can use the SendToServer method (actually it is the only reliable method), but you have to handle client-server communication process. It means you cannot just call the method five times in sequence, otherwise you encounter sync problem (the server is not capable of receiving so many keystrokes in such rapid way). You have to send one carriage return or tab, then wait for the server response (cursor move or prompt display).

TerminalControl class is not designed for scripting primarily (VirtualTerminal class is better for this), but it is still possible using the Process or Expect methods, but you have to switch TerminalControl from automatic processing mode to manual by calling the SetProcessingMode method.

Log in sequence can look like this:

terminal.SetProcessingMode(TerminaProcessingMode.None)
terminal.Bind(New Telnet("host"))
terminal.Expect("gin: ", 9000) ' wait for login
terminal.SendToServer("user" & vbCr)
terminal.Expect("sword: ", 9000) ' wait for password
terminal.SendToServer("password" & vbCr)
terminal.SetProcessingMode(TerminaProcessingMode.Automatic)
by (190 points)
edited

Thanks very much, that works great!

Cheers Tom

...