将 C# SerialPort 连接到 Hyper-V 命名管道(就像 PuTTy 一样)

Connecting C# SerialPort to Hyper-V named pipe (Just Like PuTTy can)

我正在开发一个连接到虚拟机的应用程序(使用 Hyper-V)。 (我现在正在使用虚拟机进行开发,但最终产品将是物理串行连接的机器。而不是虚拟机) 我用这样的 COM 适配器创建了一个命名管道。

我可以像这样连接 PuTTy。

运行 基于 Hyper-V 构建的 CentOS

然后我编写了一个简单的应用程序以使用 C# 连接到它

my_Serial_Port = new SerialPort();
my_Serial_Port.PortName = @"\.\pipe\ttyS0";
my_Serial_Port.BaudRate = m_BaudRate;
my_Serial_Port.DataBits = 8;
my_Serial_Port.Parity = Parity.None;
my_Serial_Port.StopBits = StopBits.One;
my_Serial_Port.Handshake = Handshake.None;
my_Serial_Port.DtrEnable = true;
my_Serial_Port.RtsEnable = true;
my_Serial_Port.WriteTimeout = 15000;
my_Serial_Port.ReadTimeout = 15000;

my_Serial_Port.ErrorReceived += my_Serial_Port_ErrorReceived;

问题是当我打开连接时,抛出了这个异常。

稍作搜索,我找到了此信息,但没有解决方法。 msdn.microsoft.com/en-us/library/system.io.ports.serialport.portname 我也尝试过 运行 我的管理员申请(Putty 也需要这个) 而且它没有用。

根据 Oystein 的建议,我尝试了:

string[] ports = SerialPort.GetPortNames();

string result = "The following serial ports were found:" + Environment.NewLine;

// Display each port name to the console.
foreach (string port in ports)
{
    result += port + Environment.NewLine;
}

MessageBox.Show(result);

很遗憾,COM1 在物理机上。

有谁知道我如何让它工作? 谢谢!

您可以使用 PLink 自动执行 PuTTy 连接。

我在另一个网站上看到了这个答案。 使用 Plink

此解决方案有其优点。 我将能够使用相同的 tool/wrapper 自动执行串行和 SSH 连接。 使用像

这样的函数
"Send_Command(string command);" 

"Wait_For_Prompt(string prompt, int timeout);"

我在 Stack Overflow 上找到了这个,它帮助我完成了这个项目。 Answer

此外,PLink 附带 Putty 的完整安装,如果您查看安装位置,还有更多有用的应用程序。

  • pageant.exe
  • plink.exe
  • pscp.exe(windows 到 linux 文件传输)
  • psftp.exe

Hyper-V 将来宾上的虚拟 COM 端口连接到主机上的 Win32 命名管道。在主机上,您应该连接到命名管道 (NamedPipeClientStream),而不是串行端口。