从C#应用程序自动传输Netcat文件-Windows&;树莓派

本文关键字:amp -Windows 文件 应用程序 Netcat 传输 | 更新日期: 2023-09-27 18:00:53

我正试图通过Netcat从基于Linux的服务器(Raspberry Pi(接收一个文件。

在发送方(Raspberry Pi(,我运行了一个小Python脚本,它只是打包一些文件并将它们发送到管道中。这非常有效,并且经过了大量测试。

在接收器端(Windows 8.1 Pro(,我使用Netcat将传入流转换为文件。如果我在cmd.exe中手动完成此操作,效果会很好:

nc -l -p <port> > C:'file.gz

我的文件按计划到达。然而,当我尝试使用C#脚本(.Net 4.5(在接收方自动执行此过程时,文件根本无法到达。我的代码如下:

public void StartListeningToNetcat()
        {
            Process ncProcess = new Process();
            ncProcess.StartInfo.UseShellExecute = false;
            ncProcess.StartInfo.CreateNoWindow = false;
            ncProcess.StartInfo.RedirectStandardOutput = true;
            ncProcess.StartInfo.RedirectStandardInput = true;
            ncProcess.StartInfo.FileName = "cmd.exe";
            ncProcess.StartInfo.Arguments = @"C:'...'nc -l -p <port> > C:'file.gz";
            ncProcess.Start();
        }

我知道,通过cmd.exe运行nc是一条弯路,但直接调用netcat是这样的:

            ncProcess.StartInfo.FileName = "C:'...'nc.exe";
            ncProcess.StartInfo.Arguments = @"-l -p <port> > C:'file.gz";

返回错误:">:正向主机查找失败:h_errno 11001:host_NOT_FOUND"。无论如何,我不介意忽略这个错误,并以"不雅"的方式调用cmd.exe.

假设windows不允许应用程序在我的硬盘上写入传入文件可能是一种安全措施,我尝试打开防火墙并使用:

            ncProcess.StartInfo.Verb = "runas";

没有成功。有人能给我指正确的方向吗?

从C#应用程序自动传输Netcat文件-Windows&;树莓派

我刚刚能够自己解决这个问题:

我没有用运行netcat的参数执行"cmd.exe",也没有调用netcat本身,而是提前创建了一个批处理文件,稍后可以在C#脚本中调用它。

public void StartListenToNetcat()
{
        string batchPath = CreateNetcatBatchFile();   
        Process.Start(batchPath);
}
public string CreateNetcatBatchFile()
{
        Streamwriter w = new StreamWriter("C:'runNC.bat");
        w.WriteLine("C:'...'nc -l -p 22 > C:'file.gz");
        w.Close();
        return "C:'runNC.bat";
}

但我还是不明白这种迂回的必要性。如有澄清意见,不胜感激。