GNU/Linux >> Linux の 問題 >  >> Linux

TCP 経由で仮想シリアル ポート接続を作成する

socatを試してください。考えられるシナリオ:

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

ソキャット 192.168.254.254:8080 への TCP 接続を作成し、/dev/virtualcom0 に書き込まれるすべてのものが 192.168.254.254:8080 に転送され、その逆も同様です。

別のアプローチ Linux サーバー側では ser2net 経由で RFC2217 を使用し、Windows 側では RFC2217 ドライバーを使用します (たとえば、http://www.hw-group.com/products/hw_vsp/index_en.html シングル ポート バージョン)。 http://pyserial.sourceforge.net/ で ser2net を使用することもできます。


このソフトウェアは、TCP http://www.serial-com-port.com/ でサーバーとクライアントの接続を確立するのに役立ちます。

ネットワーク経由で仮想シリアル通信を作成するために使用していますが、コンピューターには実際の RS232 ポートがあります。そのため、ネットワーク経由でデータを転送するだけです。サーバー上にも仮想 COM を作成する必要がある場合は、仮想シリアル ポート ドライバーを使用します。


あなたはsocatとser2netと他のプログラムを持っていますが、私の経験は非常に悪いです...正しく動作していません.私はこの小さな python プログラムを実行しましたが、役に立つ可能性があります。ポート、ボーレートを更新してから、任意の tcp クライアントを使用します。自動実行スクリプトとして使用したくない場合は、最初の行を削除してください

#!/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 – Raspberrypiシリアルポート?

  2. Pulseaudioで仮想出力を作成する方法は?

  3. 250000ボーでシリアル接続を監視する方法は?

  1. Netbsdシリアルポートゲートウェイ?

  2. Linux 用の仮想シリアル ポート

  3. CLOSE_WAIT ソケット接続を削除するにはどうすればよいですか

  1. SO_SNDBUF の効果

  2. 特定のポートで TCP トラフィックを監視する

  3. コンソールをシリアル ポートにリダイレクトする