Я пытаюсь автоматизировать несколько команд unix, которые необходимо выполнить на удаленном сервере unix через VB.NET. В настоящее время я бы открыл командную строку, подключился к хосту с telnet, выдать мои команды и выйти из сеанса. В рамках более крупного проекта я хотел бы автоматизировать это. Я изучал различные методы настройки сетевых подключений с VB в течение нескольких дней, и я не приближаюсь к решению. Я попытался использовать библиотеку DLL третьей стороны (как предложено здесь: executing commands on unix server via visual basic application) в качестве ссылки на мой проект, но я получаю ошибку таймаута, которую я не могу решить, пытаясь просто получить список каталогов в качестве теста.Как установить TCP-соединение с Unix-сервером с помощью VB.NET
Я пробовал кодировать его сам с помощью TcpClient, но мой код просто зависает после первого ответа (см. Код & ниже). У меня нет опыта работы с сетями, портами или сокетами, отличными от того, что я прочитал за последние несколько дней. У меня нет проблем с безопасностью в связях, я нахожусь в интранете моей компании. Любая помощь для решения проблемы была бы весьма признательна.
код: В первую очередь вырезать и вставить из MSDN VB, например, для TcpClient
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()
Выход в текстовое поле:
Sent: {0} имя пользователя \ п
ПОЛУЧАЛ: {0} ?? ?? ?? # ?? $
Sent: {0} пароль \ п
вы не отправляете «\ n», вы отправляете vbcrlf или chr (10) в качестве возврата каретки – user2930100