Hi Brian
Thanks very much for your help - It's greatly appreciated.
As you can probably tell I'm a novice programmer !
Sorry about all the back slashes - the free mail server I use does it
automatically for some odd reason - probably related to security. Have
to switch server.
I'll give it a try with sockets
Thanks
Kingsley
require \'net/telnet\'
require \'thread\'Why do you keep putting these backslashes in? It means your code
can't be
pasted in and runthr4 = Thread.new() do
loop do
tn.cmd(gets.chomp) { |str| print str }
end
endthr3 = Thread.new() do
loop do
tn.waitfor(\"Match\" => /.+/) { |str| print str }
end
endI have never used the telnet module you are talking about; are you
sure it's
thread-safe? (i.e. you can simultaneously call "cmd" and
"waitfor" on a
single instance?)Looking at the documentation in the pickaxe, it looks like you're
using it
in the wrong way: if you pass a block to Telnet#cmd then that block
receives
the results from the server. Hence you have two threads
simultaneously
trying to read responses from the server, which seems like a bad
thing to
me.You'd need to do something like:
line = gets.chomp
tn.cmd( {'String'=>line, 'Match'=>/.+/, Timeout=>5} )But even that's wrong, because the server could generate multiple
responses
to one command, but your match on /.+/ would catch only the first
response.
In other words, the telnet class is only really useful if you know
what
response to expect from each command. It's a kind of poor-man's
"expect".Personally I think you'd be better of with a raw socket, because
then you
definitely can send and receive simultaneously:require 'socket'
require 'thread'sock = TCPSocket.new('ftp.tiscali.nl',21)
t1 = Thread.new do
while line = gets
sock.write line
end
end
t2 = Thread.new do
while ch = sock.read(1)
putc ch
end
end
t1.join
t2.joinThe only thing to beware of is that a true telnet server may send
some odd
escape sequences as it tries to negotiate some telnet options, but
apart
···
On 06-30-2003 09:17 pm, you wrote:
On Tue, Jul 01, 2003 at 02:07:14AM +0900, kingsley@icecode.org wrote:
from that the above should be fine as a simple telnet client.Regards,
Brian.