GNU/Linux >> Znalost Linux >  >> Linux

Vytvořte připojení virtuálního sériového portu přes TCP

Zkuste socat. Možný scénář:

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

socat vytvoří TCP spojení na 192.168.254.254:8080, takže vše, co bude zapsáno do /dev/virtualcom0, bude přesměrováno na 192.168.254.254:8080 a naopak.

Jiný přístup by bylo použití RFC2217 přes ser2net na straně serveru Linux a ovladač RFC2217 na straně Windows (například http://www.hw-group.com/products/hw_vsp/index_en.html verze s jedním portem). Můžete také zkusit získat http://pyserial.sourceforge.net/ pro práci se ser2net.


Software pomůže vytvořit připojení serveru a klienta přes TCP http://www.serial-com-port.com/

Používám jej pro vytváření virtuální sériové komunikace po síti, ale na počítači mám skutečný port RS232. Takže jen přenáším data přes síť. Pokud potřebujete vytvořit virtuální COM také na serveru, použijte ovladač virtuálního sériového portu.


máte socat a ser2net a další programy, ale moje zkušenost je velmi špatná... nefunguje správně. Udělal jsem tento malý python program, může být užitečný. Aktualizujte port, přenosovou rychlost... pak použijte libovolného tcp klienta. Odstraňte první řádek, pokud jej nechcete používat jako automaticky spustitelný skript

#!/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. Jak monitorovat sériové připojení @ 250 000 Baud?

  2. Brána sériového portu Netbsd?

  3. Virtuální sériový port pro Linux

  1. Účinek SO_SNDBUF

  2. Jak úplně zničit připojení zásuvky v C

  3. Připojení odmítlo MongoDB errno 111

  1. Vysoce výkonné programování TCP Socket v .NET C#

  2. Monitorujte provoz TCP na konkrétním portu

  3. Jak mohu vytvořit trvalé připojení SSH pro streamování příkazů po určitou dobu?