Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2016, 21:25   #1
C#D
Новичок
Джуниор
 
Регистрация: 30.05.2016
Сообщений: 4
По умолчанию Подключение к маршрутизатору

Здравствуйте.
Объясните пожалуйста одну вещь. Пытаюсь подключится к маршрутизатору и получить от него ответ с требованием ввести логин и пароль, но я не наблюдаю от него ответа пока не приостанавливаю выполнение программы хотя бы на 69 миллисекунд. Я предполагаю что программа выполняется быстрее чем получает ответ. Если я правильно понимаю, то как мне подключиться к любому другому хосту в сети не зная время задержки???
Вот мой код:
Код:
static void Main(string[] args)
        {
            List<byte> b = new List<byte>();
            int j = 0;
            string returndata = string.Empty;
            TcpClient Client = new TcpClient(); 
            try
            {
                Client.Connect("192.168.1.1", 23); 
            }
            catch
            {
                Console.WriteLine("Cannot connect to remote host!");
                return;
            }
 
            NetworkStream networkstream = Client.GetStream();
            System.Threading.Thread.Sleep(69);
            do
            {
                j = networkstream.ReadByte();
                b.Add((byte)j);
                returndata = Encoding.UTF8.GetString(b.ToArray());
            }
            while (networkstream.DataAvailable);
            Console.Write(returndata);
            Console.ReadKey();
        }
C#D вне форума Ответить с цитированием
Старый 30.05.2016, 21:43   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

DataAvailable означает что данные есть, а не что пришел ответ.

вы можете только вводить таймауты.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 30.05.2016, 21:46   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Как именно не наблюдаете ответа? Exception выпадает или что?

Вообще чтение по 1 байту в цикле пока DataAvailable это странно, вряд ли так будет работать нормально.
Обычно должно быть известно сколько байтов надо читать (зависит от протокола как именно).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 30.05.2016, 21:49   #4
C#D
Новичок
Джуниор
 
Регистрация: 30.05.2016
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
DataAvailable означает что данные есть, а не что пришел ответ.
А есть метод который ознаменует, что пришел ответ? Может у меня подход не правильный, неужели нет другого выхода кроме как подбирать таймауты? Может есть метод определить таймаут?
C#D вне форума Ответить с цитированием
Старый 30.05.2016, 21:52   #5
C#D
Новичок
Джуниор
 
Регистрация: 30.05.2016
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Как именно не наблюдаете ответа? Exception выпадает или что?

Вообще чтение по 1 байту в цикле пока DataAvailable это странно, вряд ли так будет работать нормально.
Обычно должно быть известно сколько байтов надо читать (зависит от протокола как именно).
Исключения не выходит, протосто темный экран. Дело в том что мне неизвестно сколько придет байт.
C#D вне форума Ответить с цитированием
Старый 30.05.2016, 21:54   #6
C#D
Новичок
Джуниор
 
Регистрация: 30.05.2016
Сообщений: 4
По умолчанию

Пробовал писать через
Код:
socket.Receive
но эффект был тот же.
C#D вне форума Ответить с цитированием
Старый 30.05.2016, 22:12   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну точнее не обязательно именно "сколько", может быть просто читать пока не встретится \r\n или типа того, читайте спецификацию протокола.

Если Телнет, то разве нет готовых библиотек? https://www.google.com/search?q=c%23+telnet+client
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подключение к БД SashaS ASP.NET 3 21.04.2012 12:14
подключение wi-fi ada73 Операционные системы общие вопросы 16 08.04.2012 18:13
Подключение sid1868 Помощь студентам 6 02.06.2011 18:53
подключение двух компьютеров к интернет через одно подключение Chudo4258 Помощь студентам 3 30.03.2010 16:07
как получить доступ к кампьютеру который подключон к маршрутизатору, а не на прямую к интернету freest Работа с сетью в Delphi 0 19.01.2010 21:32