VB.net难以在我的程序中使用RedirectStandardInput

时间:2015-03-05 14:43:15

标签: vb.net cmd netcat

我正在尝试使用netcat在vb中创建一个简单的聊天程序。这是我的代码

Public Class Form1
    Dim p As New Process
    Dim pstrt As New System.Diagnostics.ProcessStartInfo
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Go()
    End Sub
    Sub Go()
        pstrt.FileName = "cmd.exe"
        pstrt.Arguments = "/c nc -l -p1234"
        pstrt.UseShellExecute = False
        pstrt.RedirectStandardOutput = True
        pstrt.RedirectStandardInput = True
        AddHandler p.OutputDataReceived, AddressOf yo
        p.StartInfo = pstrt
        p.Start()
        p.BeginOutputReadLine()
    End Sub

    Sub yo(ByVal sender As Object, ByVal e As DataReceivedEventArgs)
        UpdateTextBox(e.Data)
    End Sub

    Private Delegate Sub UpdateTextBoxDelegate(ByVal Text As String)
    Private Sub UpdateTextBox(ByVal tot As String)
        If Me.InvokeRequired Then
            Dim delgt As New UpdateTextBoxDelegate(AddressOf UpdateTextBox)
            Dim args As Object() = {tot}
            Me.Invoke(delgt, args)
        Else
            RichTextBox1.Text &= tot & Environment.NewLine
        End If

    End Sub

    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        'Shell(TextBox1.Text)
        'Console.WriteLine(TextBox1.Text)
        p.StandardInput.WriteLine(TextBox1.Text)

    End Sub
End Class

表单包含richtextboxtextboxtwo buttons。 问题是:

  1. 使用redirectstandardinput时,收到的文本不会显示在richtextbox中,但接收方可以查看发送的文本。
  2. 当我没有重定向标准输入时,接收到的文本会显示在richtextbox中,但接收方无法查看发送的文本。
  3. 我还尝试使用注释代码(对于button2点击代码)来在不使用redirectstandardinput时发送文本。

1 个答案:

答案 0 :(得分:0)

对我来说,您的代码无需更改即可正常运行

 
pstrt.RedirectStandardOutput = True
pstrt.RedirectStandardInput = True

见截图:

enter image description here

我猜你的问题可能与netcat有关。

  • 首先尝试使用简单的命令,如样本所示。

  • 尝试另一台机器。我在Windows 8.0,.NET 4.0上进行了测试。