Create a virtual serial port connection over TCP

后端 未结 3 872
野的像风
野的像风 2021-02-01 20:46

I am developing an application that should be able to write to a virtual serial port and receive data through the same port from remote clients over network.

The applica

相关标签:
3条回答
  • 2021-02-01 21:21

    you have socat and ser2net and other programs but my experience is very bad... not working properly. I've done this small python program, can be useful. Update port, baudrate... then use any tcp client. Remove first line if don't want to use is as auto executable script

    #!/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()
    
    0 讨论(0)
  • 2021-02-01 21:31

    The software will help to establish server and client connection over TCP http://www.serial-com-port.com/

    I use it for creating virtual serial communications over network, but I have the real RS232 port on the computer. So I just transfer the data over network. If you need to create a virtual COM on the server too, use the Virtual Serial Port Driver.

    0 讨论(0)
  • 2021-02-01 21:35

    Try socat. Possible scenario:

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

    socat creates TCP connection to 192.168.254.254:8080, so that everything, that will be written to /dev/virtualcom0 will be forwarded to 192.168.254.254:8080 and vice versa.

    Another approach would be to use RFC2217 via ser2net on Linux sever side and RFC2217 driver on Windows side (for example http://www.hw-group.com/products/hw_vsp/index_en.html single port version). You can also try to get http://pyserial.sourceforge.net/ to work with ser2net.

    0 讨论(0)
提交回复
热议问题