GNU/Linux >> Linux Esercitazione >  >> Linux

Crea una connessione alla porta seriale virtuale su TCP

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()

Linux
  1. Come creare un output virtuale in Pulseaudio?

  2. Come monitorare una connessione seriale a 250000 baud?

  3. Porta seriale virtuale per Linux

  4. Effetto di SO_SNDBUF

  5. Come distruggere completamente una connessione socket in C

Come creare una rete virtuale in Azure Cloud

Come creare una nuova macchina virtuale su Proxmox?

Come posso creare una connessione SSH persistente per lo streaming di comandi per un periodo di tempo?

Uccidi il processo in esecuzione sulla porta 80

Porta seriale RaspberryPi

Unix socket vs host TCP/IP:porta