【问题标题】:virtual socat serial port and c# on ubuntu linuxubuntu linux上的虚拟socat串口和c#
【发布时间】:2011-11-08 17:32:42
【问题描述】:

出于测试目的,我正在尝试编写一个简单的程序来连接到使用 socat 创建的虚拟串行端口。

我用这个命令创建串口:

socat -d -d PTY,b9600 PTY,link=ttyVS1,b9600

得到这个输出:

2011/11/08 18:26:31 socat[32708] N PTY is /dev/pts/1
2011/11/08 18:26:31 socat[32708] N PTY is /dev/pts/2
2011/11/08 18:26:31 socat[32708] N starting data transfer loop with FDs [3,3] and [5,5]

当我尝试以这种方式连接时:

System.IO.Ports.SerialPort _port;
_port = new SerialPort("/dev/pts/1", 9600);
_port.Open();

我收到一个“文件名未知”System.IO.IOException

我是否缺少设置 DataBits、StopBits 或其他参数?如何发现 socat 设置的属性?或者这段代码有什么问题?

【问题讨论】:

  • 没什么相关的,只是提一下,在我的母语中 Socat 的意思是“迟钝”=)

标签: c# serial-port virtual-serial-port socat


【解决方案1】:

这里的错误肯定是设备的名称。你可以在 /dev 检查 /dev/pts/1 存在吗?也许它有另一个名字,比如 /dev/pts1?

【讨论】:

  • 我会检查并在这里发布...现在我可以说我已经使用 com0com(虚拟串行端口软件)对 Windows 进行了另一次测试。我能够运行同一软件的两个实例(没有波特率的连接,只是端口)并交换数据!我想对 Ubuntu Linux(以及 Mac OS X)做同样的事情......
  • 在 linux 上的问题是,如果 /dev/pts/1(和 2)都存在,当我调用 Serial.GetPortNames() 时,我看不到 /dev/pts/* 列出.可能 Mono 运行时的行为就像 .NET 运行时无法连接到未命名为 COM* 的端口(对于 linux 可能是 /dev/tty*,我不知道!)。听起来正确吗? (我可以通过符号链接解决问题吗?)
  • 调用GetPortNames()时有什么问题?
  • /dev/ttyS0 /dev/ttyS1 /dev/ttyS10 /dev/ttyS11 /dev/ttyS12 /dev/ttyS13 /dev/ttyS14 /dev/ttyS15 /dev/ttyS16 /dev/ttyS17 /dev /ttyS18 /dev/ttyS19 /dev/ttyS2 /dev/ttyS20 /dev/ttyS21 /dev/ttyS22 /dev/ttyS23 /dev/ttyS24 /dev/ttyS25 /dev/ttyS26 /dev/ttyS27 /dev/ttyS28 /dev/ttyS29 /dev/ttyS3 /dev/ttyS30 /dev/ttyS31 /dev/ttyS4 /dev/ttyS5 /dev/ttyS6 /dev/ttyS7 /dev/ttyS8 /dev/ttyS9
  • 好的,我们有两件事要检查。或者串行端口的 Mono 实现仅支持以 /dev/ttySx 开头的端口,或者方法存在错误(嗯......我不知道代码如何知道 /dev/pts/1无论如何是一个串行端口...)。你能把socat创建的端口改成tty名字吗?或链接?或类似的东西?你明白了……我不是 Linux 专家……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 2015-12-10
  • 2014-01-28
相关资源
最近更新 更多