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

时间:2018-06-16 16:53:47

标签: c# linux serial-port hyper-v

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

Creating the Named Pipe in Hyper-V

我能够与PuTTy建立联系。

Connection Information for PuTTy

在Hyper-V上运行CentOS Build

Custom CentOS Terminal

然后我写了一个简单的应用程序,用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;

问题是,当我打开连接时,我会抛出此异常。

Parameter Portname Cannot Start with /

稍微搜索一下,我发现了这些信息,但没有解决方法。 msdn.microsoft.com/en-us/library/system.io.ports.serialport.portname 我也试过以管理员身份运行我的应用程序(Putty Needed this) 它没用。

根据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在物理机上。

Only Found COM1

有没有人知道如何让它发挥作用? 谢谢!

2 个答案:

答案 0 :(得分:0)

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

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

这个解决方案有一个好处。 我将能够使用相同的工具/包装器自动化串行和SSH连接。 使用

等功能
"Send_Command(string command);" 

"Wait_For_Prompt(string prompt, int timeout);"

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

另外,PLink附带了Putty的完整安装,以及更有用的应用程序,如果您查看安装它的位置。

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

答案 1 :(得分:0)

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