Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 21.04.2015
Сообщений: 94

Необходимо сделать перебор ip-адресов которые находятся в текстовом файле для подключение к серверу (while)

11.09.2016, 14:17. Показов 2403. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно что бы через while программа перебирала ip в файле, и выход из цикла происходил тогда когда нужный ip найден, то есть удалось с эти ip адресом подключиться, вот проблема в том что я не понимаю как написать выход из цикла.
За ранее спасибо за любую помощь !!
Вот метод который вызывает при нажатии на кнопку Connect
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public void InitializeConnection()
        {
           try
            {
                int HH = 0; // Переменная которая с каждым прохождением цикла while берет следующую строку в файле 
                do
                {
                  
                    string secondLine = File.ReadLines(@"ipAdress\Adreess.txt").Skip(HH).First();
                    string temp = secondLine;
                    tcpServer = new TcpClient();
 
                    ipAddr = IPAddress.Parse(temp);
                    tcpServer.Connect(ipAddr, 2000);
                    HH++;
                    if (temp == null) break;
                    Connected = true;                       
                } while (....); // Не знаю что здесь написать 
 
 
                //    secondLine = null;
 
                UserName = textBox2.Text;
                textBox1.Enabled = false;
                textBox2.Enabled = false;
                textBox3.Enabled = true;
                button2.Enabled = true;
                button1.Text = "Отключение";
 
                thrMessaging = new Thread(new ThreadStart(ReceiveMessages));
                thrMessaging.Start();
            }
            catch (Exception ex)
            {
             
               
            }
        }
Вот что в самой кнопку Connect
C#
1
2
3
4
5
6
7
8
 if (Connected == false)
            {
                InitializeConnection();
            }
            else 
            {
                CloseConnection("Disconnected at user's request.");
            }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.09.2016, 14:17
Ответы с готовыми решениями:

Проверить, является ли введенная строка названием страны, которые находятся в текстовом файле
Помогите с реализацией идеи. К примеру у меня есть текстовый файл, в котором написаны названия стран с каждой новой строки. в программе я...

Вывод названий операционных систем для компьютеров, имена которых находятся в списке в текстовом файле
Добрый вечер. Помогите разобраться (PowerShell стал изучать не давно). По заданию в файле Spisok.txt находится список имен...

Разрешить Подключение к серверу только по списку адресов
Нужно разрешить подключение к серверу только определенному списку адресов. Как это реализовать?

20
 Аватар для iDReeM
64 / 68 / 18
Регистрация: 21.10.2015
Сообщений: 228
11.09.2016, 18:13
зачем do? просто while(!Connected)
0
0 / 0 / 0
Регистрация: 21.04.2015
Сообщений: 94
11.09.2016, 20:38  [ТС]
Что-то не получается, если нужный ip стоит на первой позиции в файле так все работает, а вот если сместить к примеру на 5 место то не работает, что-то он не хочет перебирать

Добавлено через 39 минут
Программа почему то берет первый ip адресс, с ним у неё не получается подключиться, и все, цикл прекращается сразу же, а программа падает

Добавлено через 36 минут
Получилось вот таким вот образом, но это оооочень долго)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 public void InitializeConnection()
        {
           try
            {
                while (!Connected) 
                {
                    tcpServer = new TcpClient();
                    string secondLine = File.ReadLines(@"ipAdress\Adreess.txt").Skip(HH).First();
                    string temp = secondLine;
                    ipAddr = IPAddress.Parse(temp);
                    tcpServer.Connect(ipAddr, 2000);  
                    Connected = true; 
                }
          
                UserName = textBox2.Text;
                textBox1.Enabled = false;
                textBox2.Enabled = false;
                textBox3.Enabled = true;
                button2.Enabled = true;
                button1.Text = "Отключение";
                thrMessaging = new Thread(new ThreadStart(ReceiveMessages));
                thrMessaging.Start();
 
 
 
            }
            catch (Exception ex)
             
            {
                HH++;
                InitializeConnection();
            }
        }
Добавлено через 4 минуты
дже while не нужен) помогите сделать по нормальному )
0
Эксперт .NET
 Аватар для Rius
13085 / 7645 / 1670
Регистрация: 25.05.2015
Сообщений: 23,285
Записей в блоге: 14
11.09.2016, 20:56
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
string[] addresses = File.ReadAllLines(@"ipAdress\Adreess.txt"); // Относительные пути - это ОЧЕНЬ ПЛОХО!
 
IPAddress selectedAddress = addresses
    .AsParallel()
    .Select(x => IPAddress.Parse(x))
    .Where(x =>
    {
        var client = new TcpClient();
        client.Connect(x, 2000);
        return client.Connected;
    })
    .FirstOrDefault();
 
if (selectedAddress != null)
{
    ...
    thrMessaging = new Thread(new ThreadStart(ReceiveMessages));
    thrMessaging.Start();
}
0
0 / 0 / 0
Регистрация: 21.04.2015
Сообщений: 94
11.09.2016, 21:38  [ТС]
Что-то все ровно не выходит Ошибка в 9 строке, ошибка о том что не удалось получить отклик от сервера
0
Эксперт .NET
 Аватар для Rius
13085 / 7645 / 1670
Регистрация: 25.05.2015
Сообщений: 23,285
Записей в блоге: 14
11.09.2016, 21:51
Ну так замените
C#
1
2
client.Connect(x, 2000);
return client.Connected;
на
C#
1
2
3
4
5
6
7
8
9
try
{
  client.Connect(x, 2000);
  return client.Connected;
}
catch
{
  return false;
}
Ещё есть метод, принимающий сразу массив: https://msdn.microsoft.com/ru-... .110).aspx
Но проверить не на чем.
0
0 / 0 / 0
Регистрация: 21.04.2015
Сообщений: 94
11.09.2016, 22:21  [ТС]
Даже так не выходит, могу скинуть проект, глянете если не затруднит
0
Эксперт .NET
 Аватар для Rius
13085 / 7645 / 1670
Регистрация: 25.05.2015
Сообщений: 23,285
Записей в блоге: 14
11.09.2016, 22:30
Всё выходит:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using System;
using System.Linq;
using System.Net;
using System.Net.Sockets;
 
namespace Marsha11
{
    class Program
    {
        static void Main(string[] args)
        {
            InitializeConnection();
        }
 
        static void InitializeConnection()
        {
            string[] addresses = //File.ReadAllLines(@"ipAdress\Adreess.txt");
            {
                "195.54.18.103", // 74.ru
                "52.0.14.116", // nasa.gov
                "93.171.223.103" // cyberforum.ru
            };
 
            IPAddress selectedAddress = addresses
                .AsParallel()
                .Select(x => IPAddress.Parse(x))
                .Where(x =>
                {
                    var client = new TcpClient();
                    try
                    {
                        client.Connect(x, 80);
                        return client.Connected;
                    }
                    catch
                    {
                        return false;
                    }
                })
                .FirstOrDefault();
 
            if (selectedAddress != null)
            {
                Console.WriteLine("Found: " + selectedAddress);
            }
        }
    }
}

Bash
1
Found: 195.54.18.103
0
0 / 0 / 0
Регистрация: 21.04.2015
Сообщений: 94
11.09.2016, 22:31  [ТС]
Если место X вписать нужный ip то все работает, клиент подключается к серверу, значит проблема с перебором
0
Эксперт .NET
 Аватар для Rius
13085 / 7645 / 1670
Регистрация: 25.05.2015
Сообщений: 23,285
Записей в блоге: 14
11.09.2016, 22:36
Значит проблема в данных, поставляемых файлом.

Добавлено через 4 минуты
Вот со списком сразу:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
static void InitializeConnection()
{
    string[] addresses = //File.ReadAllLines(@"ipAdress\Adreess.txt");
    {
        "192.168.0.5", // недоступный адрес
        "195.54.18.103", // 74.ru
        "52.0.14.116", // nasa.gov
        "93.171.223.103" // cyberforum.ru
    };
 
    var client = new TcpClient();
    IPAddress selectedAddress = null;
    try
    {
        client.Connect(addresses.Select(x => IPAddress.Parse(x)).ToArray(), 80);
        if (client.Connected)
        {
            selectedAddress = ((IPEndPoint)client.Client.RemoteEndPoint).Address;
        }
    }
    catch
    {
    }
 
    if (selectedAddress != null)
    {
        Console.WriteLine("Found: " + selectedAddress);
    }
}
0
0 / 0 / 0
Регистрация: 21.04.2015
Сообщений: 94
11.09.2016, 22:37  [ТС]
Может вы меня не так понимаете, но мне нужно, что бы на запущенный сервер с IP(192.168.1.5 - он может меняться, в зависимости от ПК на котором расположен сервер), клиент при нажатии на кнопку Connect, программа перебрала ip из файла, и находила ip для подключения к серверу, а нашем случае это 192.168.1.5. То есть взяла первый ip, если он не подошел, взяла другой ip, и так далее пока не найдет нужный,в файле может быть до 30 000 ip, то есть должно все быть быстро
0
Эксперт .NET
 Аватар для Rius
13085 / 7645 / 1670
Регистрация: 25.05.2015
Сообщений: 23,285
Записей в блоге: 14
11.09.2016, 22:50
Смотрите отладчиком пошаговым.
Вот в этой переменной string[] addresses должен быть массив строк с адресами нормального формата, после чтения из файла.

Добавлено через 45 секунд
о_О
А почему просто не взять IP локальной сетевухи?

Добавлено через 1 минуту
C#
1
2
3
4
5
6
7
8
9
10
static void InitializeConnection()
{
    string sHostName = Dns.GetHostName();
    IPHostEntry ipE = Dns.GetHostByName(sHostName);
    IPAddress[] IpA = ipE.AddressList;
    for (int i = 0; i < IpA.Length; i++)
    {
        Console.WriteLine("IP Address {0}: {1} ", i, IpA[i].ToString());
    }
}
Bash
1
2
IP Address 0: 192.168.56.1
IP Address 1: 192.168.2.10
Добавлено через 2 минуты
Это определяет список IP, на котором запущен сервер, при запуске программы на этом же сервере.

Добавлено через 2 минуты
Цитата Сообщение от Marsha11 Посмотреть сообщение
что бы на запущенный сервер с IP(192.168.1.5 - он может меняться, в зависимости от ПК на котором расположен сервер),
Ок, адрес не известен точно. Программа запускается не на сервере.

Цитата Сообщение от Marsha11 Посмотреть сообщение
клиент при нажатии на кнопку Connect, программа перебрала ip из файла
Программа как раз и перебирает IP из файла массива строк.

Цитата Сообщение от Marsha11 Посмотреть сообщение
, и находила ip для подключения к серверу, а нашем случае это 192.168.1.5. То есть взяла первый ip, если он не подошел, взяла другой ip, и так далее пока не найдет нужный
Так и происходит. Каждый IP выбирается, по нему пытается подключиться, и первый рабочий возвращается.

Добавлено через 3 минуты
30000 IP адресов, IMHO, будет ни разу не быстро.
0
0 / 0 / 0
Регистрация: 21.04.2015
Сообщений: 94
11.09.2016, 23:03  [ТС]
Подождите, а если взять какой-то ip скажем тот же 192.168.1.5 для сервера, и если сервер запускать на разных пк с одним и те же 192.168.1.5 , то клиент сможет подключиться ? мне просто кажется что сервер должен обязательно иметь ip такой же что и ПК

Добавлено через 6 минут
а нет, все таки клиент не может подключиться, у сервера обязательно должен быть ip такой же что и использует пк, именно поэту нужен перебор
0
Эксперт .NET
 Аватар для Rius
13085 / 7645 / 1670
Регистрация: 25.05.2015
Сообщений: 23,285
Записей в блоге: 14
11.09.2016, 23:07
Сервер и клиент это разные программы или одна?
Сервер и клиент запускаются на разных ПК или на одном?
0
0 / 0 / 0
Регистрация: 21.04.2015
Сообщений: 94
11.09.2016, 23:10  [ТС]
Сервер на одном ПК, клиент на другом ПК, и причем клиентов много(30), и все на разных ПК, сервер и клиент - это разные программы
0
Эксперт .NET
 Аватар для Rius
13085 / 7645 / 1670
Регистрация: 25.05.2015
Сообщений: 23,285
Записей в блоге: 14
11.09.2016, 23:16
Тогда изучайте код в 8 и 10 постах. Должно работать.
0
0 / 0 / 0
Регистрация: 21.04.2015
Сообщений: 94
11.09.2016, 23:21  [ТС]
А по скорости ? получится быстро находить нужный ip ? или все таки это займет вечность ?
0
Эксперт .NET
 Аватар для Rius
13085 / 7645 / 1670
Регистрация: 25.05.2015
Сообщений: 23,285
Записей в блоге: 14
11.09.2016, 23:29
Смотря, сколько параллельных подключений сможет запустится для проверки.
Если количество такие огромное, рассмотрите широковещательные средства для поиска. Точнее не подскажу.
0
0 / 0 / 0
Регистрация: 21.04.2015
Сообщений: 94
11.09.2016, 23:36  [ТС]
Хорошо, а если использовать таймер, если к примеру, проверка, подходить ли ip для подключения к серверу, занимает 0,5 сек, то сделать так что бы программа брала следующий IP, возможно ли такое ?
0
Эксперт .NET
 Аватар для Rius
13085 / 7645 / 1670
Регистрация: 25.05.2015
Сообщений: 23,285
Записей в блоге: 14
12.09.2016, 07:42
Таймер не нужен, вышеуказанные методы можно запустить в отдельном потоке. И они сами перебирают адреса.
Меньший таймаут подключения можно реализовать через асинхронное подключение, вместо синхронного.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.09.2016, 07:42
Помогаю со студенческими работами здесь

Поиск IP-адресов в текстовом файле
Требуется написать скрипт, который может выделить или вывести в тексте ip-адреса v4. Каким образом выводить, не имеет значения.

Поиск городских адресов в текстовом файле
Друзья, ай хэв а трабла. Регулярки изучать начал только дня 3 как, а лабу сдать уже надо. Суть лабы - написать регулярку, которая будет...

Необходимо описать рекурсивную функцию для подсчёта количества запятых в текстовом файле
Необходимо описать рекурсивную функцию для подсчёта количества запятых в текстовом файле. Код есть,но он неправильный, так как выдает...

Поиск в текстовом файле адресов электронной почты
Здравствуйте, есть такое задание: реализовать программу на ПХП, которая ищет в текстовом фале записи эл. почты формата XXXXXX(любое...

Удалить в текстовом файле 1.txt все строки, которые встречаются в текстовом файле 2.txt
например имеется текстовый файл 1.txt c таким содержанием 111 222 333 444 555 и имеется текстовый файл 2.txt c таким...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru