GNU/Linux >> Belajar Linux >  >> Linux

Buat koneksi port serial virtual melalui TCP

Coba socat. Skenario yang mungkin:

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

socat membuat koneksi TCP ke 192.168.254.254:8080, sehingga semua yang akan ditulis ke /dev/virtualcom0 akan diteruskan ke 192.168.254.254:8080 dan sebaliknya.

Pendekatan lain akan menggunakan RFC2217 melalui ser2net di sisi server Linux dan driver RFC2217 di sisi Windows (misalnya http://www.hw-group.com/products/hw_vsp/index_en.html versi port tunggal). Anda juga dapat mencoba agar http://pyserial.sourceforge.net/ bekerja dengan ser2net.


Perangkat lunak ini akan membantu membangun koneksi server dan klien melalui TCP http://www.serial-com-port.com/

Saya menggunakannya untuk membuat komunikasi serial virtual melalui jaringan, tetapi saya memiliki port RS232 asli di komputer. Jadi saya hanya mentransfer data melalui jaringan. Jika Anda juga perlu membuat COM virtual di server, gunakan Driver Port Serial Virtual.


Anda memiliki socat dan ser2net dan program lain tetapi pengalaman saya sangat buruk ... tidak berfungsi dengan baik. Saya sudah melakukan program python kecil ini, semoga bermanfaat. Perbarui port, baudrate ... lalu gunakan klien tcp apa pun. Hapus baris pertama jika tidak ingin menggunakan is sebagai skrip yang dapat dieksekusi otomatis

#!/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. Bagaimana Memantau Koneksi Serial @ 250000 Baud?

  2. Gerbang Serial Port Netbsd?

  3. Pengaruh SO_SNDBUF

  1. Bagaimana cara menghapus koneksi soket CLOSE_WAIT

  2. Pemrograman Soket TCP berkinerja tinggi di .NET C#

  3. Alihkan konsol ke port serial

  1. Linux – Port Serial Raspberrypi?

  2. Bagaimana Cara Membuat Output Virtual Di Pulseaudio?

  3. Soket Unix vs host TCP/IP:port