GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Erstellen Sie eine virtuelle serielle Portverbindung über TCP

Versuchen Sie es mit Sokat. Mögliches Szenario:

socat  pty,link=/dev/virtualcom0,raw  tcp:192.168.254.254:8080&

Sokat erstellt eine TCP-Verbindung zu 192.168.254.254:8080, sodass alles, was nach /dev/virtualcom0 geschrieben wird, zu 192.168.254.254:8080 weitergeleitet wird und umgekehrt.

Ein anderer Ansatz wäre, RFC2217 über ser2net auf der Linux-Serverseite und den RFC2217-Treiber auf der Windows-Seite zu verwenden (z. B. http://www.hw-group.com/products/hw_vsp/index_en.html Single-Port-Version). Sie können auch versuchen, http://pyserial.sourceforge.net/ dazu zu bringen, mit ser2net zusammenzuarbeiten.


Die Software hilft beim Aufbau einer Server- und Client-Verbindung über TCP http://www.serial-com-port.com/

Ich verwende es zum Erstellen virtueller serieller Kommunikation über das Netzwerk, aber ich habe den echten RS232-Anschluss am Computer. Also übertrage ich die Daten einfach über das Netzwerk. Wenn Sie auch auf dem Server eine virtuelle COM erstellen müssen, verwenden Sie den Virtual Serial Port Driver.


Sie haben socat und ser2net und andere Programme, aber meine Erfahrung ist sehr schlecht ... funktioniert nicht richtig. Ich habe dieses kleine Python-Programm gemacht, kann nützlich sein. Aktualisieren Sie Port, Baudrate ... und verwenden Sie dann einen beliebigen TCP-Client. Entfernen Sie die erste Zeile, wenn Sie sie nicht als automatisch ausführbares Skript verwenden möchten

#!/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. Linux – Raspberrypi Serielle Schnittstelle?

  2. Wie erstelle ich einen virtuellen Ausgang in Pulsaudio?

  3. Wie überwacht man eine serielle Verbindung bei 250000 Baud?

  4. Virtueller serieller Port für Linux

  5. Wie entferne ich eine CLOSE_WAIT-Socket-Verbindung?

So erstellen Sie ein virtuelles Netzwerk in Azure Cloud

So erstellen Sie einen virtuellen Nginx-Host (Serverblock)

Wie erstelle ich eine neue virtuelle Maschine auf Proxmox?

Wie kann ich eine dauerhafte SSH-Verbindung erstellen, um Befehle über einen bestimmten Zeitraum zu streamen?

Leiten Sie die Konsole auf einen seriellen Anschluss um

Serielle RaspberryPi-Schnittstelle