【发布时间】: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