Hi all,
I am trying to login to an external device via Telnet socket communication that has a user/pass field, but without success. Currently, I can login onto the device (on a Unix machine) with the telnet
command. Upon successful connection, I get this response, where <input>
is my input for each field:
telnet xxx.xxx.xxx.xxx 23
User:<input>
Pass:<input>
And I am successfully logged on.
I am trying to mimic this with URScript (abridged version):
1 socket_open(“xxx.xxx.xxx.xxx”,23) #Open socket at Telnet port
2 userPrompt = socket_read_string() #Reads "User: "
3 didSendUser = socket_send_line(“username”) #Send username with newline appended
4 passPrompt = socket_read_string() #Reads "Password: "
5 didSendPass = socket_send_line(“password”) #Send password with newline appended
Currently, the program reaches line 4, where it indefinitely times out. I’ve checked the value of userPrompt
, which is as expected: "User: ". Line 3 also executes successfully, as didSendUser
is True.
It seems as though the device is not processing my input, since the device never sends "Password: " back to the program. This makes me think I’ll need a separate thread to handle output, but I want to make sure that is correct before I go through with it.
Thanks in advance.
EDIT: PLEASE READ:
As it turns out, telnet requires not only a newline \n
, but also a carriage return \r
right before hand. For example: "myString\r\n"
That said, the URScript implementation still hangs up after sending the username. I’ve confirmed my above solution works in a python implementation, so I’ve temporarily resorted to XMLRPC implementation using a python server. I will occasionally troubleshoot the URScript implementation and update if I find a solution.
SOLUTION: This function works for sending string commands via Telnet:
def telnet_send(str):
socket_send_string(str)
socket_send_byte(13) #send carriage return (CR)
socket_send_byte(10) #send line feed (LF)
end
Please read my edit.
for my application with telnet command , I use URscript for login User & Password :
for login user :
socket_send_string(“MyUser”,“TelnetSocket”)
socket_send_byte(13,“TelnetSocket”)
socket_send_byte(0,“TelnetSocket”)
string_user=socket_read_string(“TelnetSocket”)
Did you mean socket_send_byte(10,“TelnetSocket”)
, hence byte 13 = CR, 10 = LF?
I had the same problem with telnet with “\n”.
I mean :
1°) socket_send_byte(13,“TelnetSocket”) = CR
2°) socket_send_byte(0,“TelnetSocket”)
Hi Jaques,
As @jbm said, using socket_send_byte(13)
followed by socket_send_byte(10)
seems to work great. Thanks for the suggestion. I’ll mark that as the solution in my original post.