Prova socat. Scenario possibile:
socat pty,link=/dev/virtualcom0,raw tcp:192.168.254.254:8080&
socat crea una connessione TCP a 192.168.254.254:8080, in modo che tutto ciò che verrà scritto in /dev/virtualcom0 verrà inoltrato a 192.168.254.254:8080 e viceversa.
Un altro approccio sarebbe utilizzare RFC2217 tramite ser2net sul lato server Linux e il driver RFC2217 sul lato Windows (ad esempio http://www.hw-group.com/products/hw_vsp/index_en.html versione a porta singola). Puoi anche provare a far funzionare http://pyserial.sourceforge.net/ con ser2net.
Il software aiuterà a stabilire la connessione server e client su TCP http://www.serial-com-port.com/
Lo uso per creare comunicazioni seriali virtuali in rete, ma ho la vera porta RS232 sul computer. Quindi trasferisco solo i dati sulla rete. Se hai bisogno di creare una COM virtuale anche sul server, usa il Virtual Serial Port Driver.
hai socat e ser2net e altri programmi ma la mia esperienza è pessima ... non funziona correttamente. Ho fatto questo piccolo programma Python, può essere utile. Aggiorna porta, baudrate... quindi usa qualsiasi client tcp. Rimuovi la prima riga se non vuoi usare is come script eseguibile automaticamente
#!/usr/bin/python
import socket
import sys
import serial
#open serial port
ser = serial.Serial('/dev/ttyAMA0', 115200, timeout=0)
#create socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
#bond to the port. Don't use localhost to accept external connections
server_address = ('', 2105)
print('starting up on {} port {}'.format(*server_address))
sock.bind(server_address)
#listen
sock.listen(1)
#loop
while True:
#waits for a new connection
print('waiting for a connection')
connection, client_address = sock.accept()
try:
print('connection from', client_address)
#continously send from serial port to tcp and viceversa
connection.settimeout(0.1)
while True:
try:
data = connection.recv(16)
if data == '': break
ser.write(data)
except KeyboardInterrupt:
connection.close()
sys.exit()
except Exception as e:
pass
received_data = ser.read(ser.inWaiting())
connection.sendall(received_data)
except Exception as e:
print e
finally:
#clean up connection
connection.close()