Jun-13-2019, 11:55 PM
Most people need a telnet to serial adapter. That is, they need a program to act as a telnet host, and when you telnet in - you get connected to a serial device. They want their device to act as a telnet SERVER.
I need the opposite. I want to have a computer automatically telnet into a server, and then I want my serial port to be connected to that server. So I need my device to be a telnet CLIENT.
Since I can find no software that does what I want, I started looking at Python, and modified something that I found on the net. For right now, I enter the server and port # on the command line. Later I'll just hard-code it.
This is running on a Raspberry pi (Raspbian_)
Also, I need a timer that will try to automatically reconnect if no data is received in 10 seconds or so.
Can someone tell me how to fix this?
I need the opposite. I want to have a computer automatically telnet into a server, and then I want my serial port to be connected to that server. So I need my device to be a telnet CLIENT.
Since I can find no software that does what I want, I started looking at Python, and modified something that I found on the net. For right now, I enter the server and port # on the command line. Later I'll just hard-code it.
This is running on a Raspberry pi (Raspbian_)
# telnet program example
import socket, select, string, sys, serial
#main function
ser = serial.Serial('/dev/serial0', 115200, timeout = 1)
if __name__ == "__main__":
if(len(sys.argv) < 3) :
print 'Usage : python telnet.py hostname port'
ser.close()
sys.exit()
host = sys.argv[1]
port = int(sys.argv[2])
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(2)
# connect to remote host
try :
s.connect((host, port))
except :
print 'Unable to connect'
ser.close()
sys.exit()
print 'Connected to remote host'
while 1:
socket_list = [sys.stdin, s]
# Get the list sockets which are readable
read_sockets, write_sockets, error_sockets = select.select(socket_list , [], [])
for sock in read_sockets:
#incoming message from remote server
if sock == s:
data = sock.recv(4096)
if not data :
print 'Connection closed'
ser.close()
sys.exit()
else :
#print data
# sys.stdout.write(data)
ser.write(data)
#incoming message
else :
# msg = sys.stdin.readline()
msg = ser.read(4096)
s.send(msg)This almost works, but the "turn around" time is too long. I need to send/receive 60-100 byte strings, and the program seems to send only one byte at a time. That doesn't work. Also, I need a timer that will try to automatically reconnect if no data is received in 10 seconds or so.
Can someone tell me how to fix this?
