GNU/Linux >> Tutoriales Linux >  >> Linux

Cree una conexión de puerto serie virtual a través de TCP

Prueba socat. Posible escenario:

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

socat crea una conexión TCP a 192.168.254.254:8080, de modo que todo lo que se escribirá en /dev/virtualcom0 se reenviará a 192.168.254.254:8080 y viceversa.

Otro enfoque sería usar RFC2217 a través de ser2net en el lado del servidor Linux y el controlador RFC2217 en el lado de Windows (por ejemplo, http://www.hw-group.com/products/hw_vsp/index_en.html versión de puerto único). También puede intentar que http://pyserial.sourceforge.net/ funcione con ser2net.


El software ayudará a establecer la conexión del servidor y el cliente a través de TCP http://www.serial-com-port.com/

Lo uso para crear comunicaciones seriales virtuales a través de la red, pero tengo el puerto RS232 real en la computadora. Así que solo transfiero los datos a través de la red. Si también necesita crear un COM virtual en el servidor, use el controlador de puerto serie virtual.


tienes socat y ser2net y otros programas pero mi experiencia es muy mala... no funciona correctamente. He hecho este pequeño programa de python, puede ser útil. Actualice el puerto, la velocidad en baudios ... luego use cualquier cliente tcp. Elimine la primera línea si no desea usarla como secuencia de comandos autoejecutable

#!/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 – ¿Puerto serie Raspberrypi?

  2. ¿Cómo crear una salida virtual en Pulseaudio?

  3. ¿Cómo monitorear una conexión serial a 250000 baudios?

  4. ¿Puerta de enlace de puerto serie Netbsd?

  5. Efecto de SO_SNDBUF

Cómo crear una Red Virtual en Azure Cloud

Cómo crear un host virtual Nginx (bloque de servidor)

¿Cómo crear una nueva Máquina Virtual en Proxmox?

¿Cómo puedo crear una conexión SSH persistente para transmitir comandos durante un período de tiempo?

Matar el proceso que se ejecuta en el puerto 80

puerto serie frambuesa pi