【问题标题】:How to setup TCP connection to unix server with VB.NET如何使用 VB.NET 建立与 unix 服务器的 TCP 连接
【发布时间】:2014-03-20 16:08:12
【问题描述】:

我正在尝试自动化一些需要通过 VB.NET 在远程 unix 服务器上执行的 unix 命令。目前我会打开命令提示符,使用 telnet 连接到主机,发出我的命令并退出会话。作为一个更大项目的一部分,我想自动化这个。几天来,我一直在研究不同的方法来建立与 VB 的网络连接,但我并没有接近解决方案。我曾尝试使用第 3 方 dll 库(此处建议:executing commands on unix server via visual basic application)作为对我的项目的引用,但我得到一个超时错误,在尝试简单地获取目录列表作为测试后我无法解决。

我尝试使用 TcpClient 自己编写代码,但我的代码在第一次响应后挂起(请参阅下面的代码和输出)。除了过去几天阅读的内容外,我对网络、端口或套接字没有任何经验。我对连接没有安全问题,我在公司的 Intranet 上。任何解决问题的帮助将不胜感激。

代码:主要从 TcpClient 的 MSDN VB 示例中剪切和粘贴

    Dim message As String

    'Connect to Server
    Dim port As Int32 = 23
    Dim client As New TcpClient(unixServer, port)

    'Send username to login to server
    message = userName & " \n"
    Dim data As [Byte]() = System.Text.Encoding.ASCII.GetBytes(message)
    Dim stream As NetworkStream = client.GetStream
    stream.Write(data, 0, data.Length)
    TextBox2.AppendText("Sent: {0} " & message & vbCrLf)
    data = New [Byte](256) {}
    Dim responseData As [String] = String.Empty
    Dim bytes As Int32 = stream.Read(data, 0, data.Length)
    responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes)
    TextBox2.AppendText("Recieved: {0} " & responseData & vbCrLf)

    'Send password to login to server
    message = passWord & " \n"
    data = New [Byte](256) {}
    data = System.Text.Encoding.ASCII.GetBytes(message)
    stream.Write(data, 0, data.Length)
    TextBox2.AppendText("Sent: {0} " & message & vbCrLf)
    data = New [Byte](256) {}
    bytes = stream.Read(data, 0, data.Length)
    responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes)
    TextBox2.AppendText("Recieved: {0} " & responseData & vbCrLf)

    'Send return key to start new line
    message = "\n"
    data = New [Byte](256) {}
    data = System.Text.Encoding.ASCII.GetBytes(message)
    stream.Write(data, 0, data.Length)
    TextBox2.AppendText("Sent: {0} " & message & vbCrLf)
    data = New [Byte](256) {}
    bytes = stream.Read(data, 0, data.Length)
    responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes)
    TextBox2.AppendText("Recieved: {0} " & responseData & vbCrLf)

    'Get directory listing
    message = "ls -lrt"
    data = New [Byte](256) {}
    data = System.Text.Encoding.ASCII.GetBytes(message)
    stream.Write(data, 0, data.Length)
    TextBox2.AppendText("Sent: {0} " & message & vbCrLf)
    data = New [Byte](256) {}
    bytes = stream.Read(data, 0, data.Length)
    responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes)
    TextBox2.AppendText("Recieved: {0} " & responseData & vbCrLf)


    stream.Close()
    client.Close()

输出到文本框:

发送:{0} 个用户名\n

收到:{0} ???? ??#??$

已发送:{0} 个密码\n

【问题讨论】:

  • 你不发送“\n”,你发送 vbcrlf 或 chr(10) 作为回车

标签: vb.net sockets unix networking telnet


【解决方案1】:

您可能只需要发送换行符 (vbLf)。发送CR+LF 可能会产生意外行为。尝试只发送LF(换行)。这可能会有所帮助。请参阅此维基百科文章:http://en.wikipedia.org/wiki/Newline#Representations

此外,这里是执行此操作的 SSH 方式:executing commands on unix server via visual basic application

但是,如果您更喜欢使用 Telnet,它被认为不如 SSH 安全,请阅读:http://social.msdn.microsoft.com/Forums/en-US/bf432ec4-cfdf-44be-a34a-5fdaf8115eb1/writing-a-telnet-client-with-vb-net?forum=netfxnetcom。这是前面提到的链接中提到的库的直接链接:http://www.c-sharpcorner.com/UploadFile/tylerkline/TelnetScripting11282005001158AM/TelnetScripting.aspx?ArticleID=a8e0e439-14df-4d82-82ee-8cb4c110f9a0。我个人喜欢使用其他已经制作的东西,所以我不需要像他们说的那样“重新发明轮子”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 2021-11-06
    • 2013-01-15
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多