Страница: 1 | 2 |
Вопрос: Работа с сетью
Добавлено: 01.06.11 14:49
Автор вопроса: Евгений
Здравствуйте!
Простите за глупые вопросы, но я только изучаю VB.NET.
Пока только писал простые программки по работе с текстовыми файлами, таблицами Excel и т.п.
Сейчас возникла потребность программы которая бы общалась по телнету с оборудованием.
Т.е. прога посылает текстовую команду по сети (телнет), в ответ оборудование присылает результат, который нужно проанализировать. Короче, что-то типа Hyper Terminal.
Если не ошибаюсь, для этих целей необходимо использовать WinSock или MS Common Control. Как мне в Visual Studio 2008 включить поддержку этих приблуд?
Если ли литература для начинающих по работе с сетью в VB.NET?
Ответы
Всего ответов: 16
Номер ответа: 1
Автор ответа:
Евгений
Вопросов: 1
Ответов: 9
Профиль | | #1
Добавлено: 01.06.11 14:51
И если не затруднит, киньте какой-нибудь простой код чтоб понять как все работает
Номер ответа: 2
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #2
Добавлено: 01.06.11 22:52
Если все работает по TCP, можно использовать System.Net.Sockets.TcpClient
Номер ответа: 3
Автор ответа:
Евгений
Вопросов: 1
Ответов: 9
Профиль | | #3
Добавлено: 02.06.11 08:42
Так отлично, спасибо.
Люди добрые, киньте пример рабочего простого кода для понятия принципа работы TCPClient.
Я только смог найти вот такой консольный код
Sub Main()
Dim session As New System.Net.Sockets.TcpClient
Dim networkstream As Net.Sockets.NetworkStream
Dim bytes(session.ReceiveBufferSize) As Byte
Dim ne_data As String
Dim send_command1("username".Length) As Byte
Dim send_command2("password".Length) As Byte
Dim send_command3("enable".Length) As Byte
Dim send_command4("config".Length) As Byte
Dim send_command5("test".Length) As Byte
Dim send_command6("pots loop-line-test telno 074984046".Length + 2) As Byte
Dim i As Integer
session.Connect("10.240.73.132", 23)
If session.Connected Then
Debug.Print("connected"
If session.GetStream.CanRead Then
networkstream = session.GetStream
Debug.Print("Sending user name"
send_command1 = System.Text.Encoding.ASCII.GetBytes("username" & vbCrLf) 'with vbCrLf successfuly can sand username and password
networkstream.Write(send_command1, 0, send_command1.Length)
networkstream.Read(bytes, 0, CInt(session.ReceiveBufferSize))
ne_data = System.Text.ASCIIEncoding.ASCII.GetString(bytes)
Debug.Print("evice said:" & ne_data & vbCrLf)
Debug.Print("Sending password"
send_command2 = System.Text.Encoding.ASCII.GetBytes("msan" & vbCrLf)
networkstream.Write(send_command2, 0, send_command2.Length)
Threading.Thread.Sleep(1000) ' wait to receive data
networkstream.Read(bytes, 0, CInt(session.ReceiveBufferSize))
ne_data = System.Text.ASCIIEncoding.ASCII.GetString(bytes)
Debug.Print("evice said:" & ne_data & vbCrLf)
Debug.Print("Sending ENABLE" 'cannot send command to the device
send_command3 = System.Text.Encoding.ASCII.GetBytes("enable" & vbLf) '??? here is the problem ???
networkstream.Write(send_command3, 0, send_command3.Length)
Threading.Thread.Sleep(1000) ' wait to receive data
ne_data = System.Text.ASCIIEncoding.ASCII.GetString(bytes)
Debug.Print("evice said:" & ne_data & vbCrLf)
'some other code
networkstream.Close()
Else
Debug.Print("can't read"
End If
Else
Debug.Print("connection failed"
End If
session.Close()
If session.Connected Then
Debug.Print("still connected"
Else
Debug.Print("disconnected"
End If
End Sub
Но разобрать в нем не получается...
Номер ответа: 4
Автор ответа:
Евгений
Вопросов: 1
Ответов: 9
Профиль | | #4
Добавлено: 02.06.11 08:43
что за хреновы смайлики вылезли...
Номер ответа: 5
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #5
Добавлено: 02.06.11 11:33
http://msdn.microsoft.com/ru-ru/library/system.net.sockets.tcpclient(v=vs.90).aspx#Y500
Номер ответа: 6
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #6
Добавлено: 02.06.11 13:51
Пример очень бредовый.
Если нужно текст отправлять, поверх NetworkStream кидается StreamWriter, и отадает необходимость создавать кучу буферов
Номер ответа: 7
Автор ответа:
Евгений
Вопросов: 1
Ответов: 9
Профиль | | #7
Добавлено: 02.06.11 14:48
Artyom, про какой пример идет речь?
Про мой или этот http://msdn.microsoft.com/ru-ru/library/system.net.sockets.tcpclient(v=vs.90).aspx#Y500 ?
Номер ответа: 8
Автор ответа:
Евгений
Вопросов: 1
Ответов: 9
Профиль | | #8
Добавлено: 02.06.11 15:12
Этот пример http://msdn.microsoft.com/ru-ru/library/1612451t(v=VS.90).aspx
не работает при явном копировании в окно кода консоли.
Мне нужно по TCP обмениваться лишь текстовой информацией с оборудованием.
Номер ответа: 9
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #9
Добавлено: 02.06.11 15:31
Про твой. Откуда на MSDN может быть бредовый пример?
Номер ответа: 10
Автор ответа:
Евгений
Вопросов: 1
Ответов: 9
Профиль | | #10
Добавлено: 02.06.11 19:30
Artyom, мне очень стыдно за свои тупые вопросы, можешь кинуть рабочий код для обмена текстом по TCP?
Приведенный выше пример из msdn не работает в явном виде, может что-то я не то делаю...
Т.е. для консольного варианта что должно содержаться в теле
Sub Main()
...
End Sub
Пожалуйста...
Номер ответа: 11
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #11
Добавлено: 03.06.11 11:36
Разумеется не будет.. ты должен, как минимум, передать IP и порт реального сервера иди девайся которое будет принимать свои сообщения и отправлять тебе ответт
Номер ответа: 12
Автор ответа:
Евгений
Вопросов: 1
Ответов: 9
Профиль | | #12
Добавлено: 03.06.11 14:49
Блин, как это сделать?
На пальцах бы объяснить...
Номер ответа: 13
Автор ответа:
Евгений
Вопросов: 1
Ответов: 9
Профиль | | #13
Добавлено: 07.06.11 15:32
Вообщем, TCP client у меня заработал. Т.е. запускаю связку клиент-сервер на двух компах и они прекрасно обмениваются между собой сообщениями.
Вопрос, как теперь подружить все это дело с Телнет-Сервером? Т.е. нужно организовать диалог по телнет-протоколу.
Номер ответа: 14
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #14
Добавлено: 08.06.11 11:58
Есть описание протокола?
Номер ответа: 15
Автор ответа:
Евгений
Вопросов: 1
Ответов: 9
Профиль | | #15
Добавлено: 09.06.11 06:46
да это обычный Telnet протокол