GNU/Linux >> Tutoriels Linux >  >> Linux

Créer une connexion de port série virtuel sur TCP

Essayez socat. Scénario possible :

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

socat crée une connexion TCP à 192.168.254.254:8080, de sorte que tout ce qui sera écrit dans /dev/virtualcom0 sera transmis à 192.168.254.254:8080 et vice versa.

Une autre approche serait d'utiliser RFC2217 via ser2net côté serveur Linux et le pilote RFC2217 côté Windows (par exemple http://www.hw-group.com/products/hw_vsp/index_en.html version à port unique). Vous pouvez également essayer de faire fonctionner http://pyserial.sourceforge.net/ avec ser2net.


Le logiciel aidera à établir une connexion serveur et client via TCP http://www.serial-com-port.com/

Je l'utilise pour créer des communications série virtuelles sur le réseau, mais j'ai le vrai port RS232 sur l'ordinateur. Donc, je viens de transférer les données sur le réseau. Si vous devez également créer un COM virtuel sur le serveur, utilisez le pilote de port série virtuel.


vous avez socat et ser2net et d'autres programmes mais mon expérience est très mauvaise... ne fonctionne pas correctement. J'ai fait ce petit programme python, peut être utile. Mettez à jour le port, le débit en bauds ... puis utilisez n'importe quel client tcp. Supprimez la première ligne si vous ne voulez pas l'utiliser comme script auto-exécutable

#!/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. Comment créer un hôte virtuel Nginx (bloc serveur)

  2. Passerelle de port série Netbsd ?

  3. Port série virtuel pour Linux

  4. Effet de SO_SNDBUF

  5. Comment détruire complètement une connexion socket en C

Comment créer un réseau virtuel dans Azure Cloud

Comment créer une nouvelle Machine Virtuelle sur Proxmox ?

Comment surveiller une connexion série à 250 000 bauds ?

Comment supprimer une connexion de socket CLOSE_WAIT

Programmation TCP Socket hautes performances en .NET C#

Rediriger la console vers un port série