首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在TCP上创建虚拟串口连接

在TCP上创建虚拟串口连接
EN

Stack Overflow用户
提问于 2014-03-25 03:00:00
回答 3查看 91.2K关注 0票数 29

我正在开发一个应用程序,它应该能够写入虚拟串口,并通过网络从远程客户端接收数据。

应用程序在linux服务器上运行。我是新的使用串口,我有一些问题在这个主题。

客户端

客户端可以建立到服务器的TCP连接。当我们设置客户端时,我们必须提供服务器的IP地址、tcp端口(通常是8080)和虚拟com端口。

然后,客户端将自动尝试连接到服务器。

服务器

服务器有一个虚拟com端口,与我们在客户端配置中设置的端口相同(例如,COM1)。当服务器上的应用程序将数据写入此端口时,应将数据发送到通过tcp连接的所有客户端。客户端的响应是将TCP发送回服务器,服务器可以通过虚拟串口读取它。

问题

在windows上,我使用了一个虚拟串口连接器http://www.eterlogic.com/Products.VSPE.html,它完成了大部分工作。但是,我想在linux机器上解决这个问题。

我的问题是,如何创建一个带有虚拟串行端口的TCP服务器,并通过TCP通过该端口向侦听客户端发送/接收数据?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-27 13:30:37

试试索纳特。可能的情况:

代码语言:javascript
复制
socat  pty,link=/dev/virtualcom0,raw  tcp:192.168.254.254:8080&

socat创建到192.168.254.254:8080的TCP连接,以便将写入/dev/0的所有内容转发到192.168.254.254:8080,反之亦然。

的另一种方法是在Linux端通过ser2net使用RFC2217,在Windows端使用RFC2217驱动程序(例如,en.html单端口版本)。您还可以尝试让http://pyserial.sourceforge.net/使用ser2net。

票数 42
EN

Stack Overflow用户

发布于 2020-10-16 18:29:19

你有socat,ser2net和其他程序,但是我的经验很糟糕.工作不正常。我已经完成了这个小小的python程序,可能很有用。更新端口,波德率。然后使用任何tcp客户端。删除第一行,如果不想使用是作为自动可执行脚本

代码语言:javascript
复制
#!/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()
票数 4
EN

Stack Overflow用户

发布于 2017-08-08 08:47:33

该软件将有助于在TCP http://www.serial-com-port.com/上建立服务器和客户端连接。

我使用它创建虚拟串行通信网络,但我有真正的RS232端口在计算机上。所以我只是通过网络传输数据。如果您也需要在服务器上创建虚拟COM,请使用虚拟串口驱动程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22624653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档