Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: Сети
Войти
Регистрация
Восстановить пароль
 
Alex_82
0 / 0 / 0
Регистрация: 15.09.2014
Сообщений: 4
1

Проверка множества IP с помощью ClientSocket

21.08.2015, 10:10. Просмотров 272. Ответов 0
Метки нет (Все метки)

Всем доброго времени суток!

Почему-то, при создании темы, название "Проверка множества IP с помощью ClientSocket" является запрещенным. Если модератор видит эту тему, не могли бы ли Вы пояснить в чем дело? Странно как-то.

Пытаюсь работать с ClientSocket. Задача не сложная, но есть проблемы.
Суть в том, что есть полсотни приборов работающие по сети. Соответственно имеют свои IP.

Для этого я из Memo по очереди беру IP.

Начало работы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void __fastcall TForm4::Button5Click(TObject *Sender)
{
//Начать скан
 
//Количество строк
this->vsego_IP = this->Memo1->Lines->Count;
//Начальный номер IP
this->curr_IP = 0;
//Порт сканирования
this->port = StrToInt(this->Edit5->Text);
 
ch_login="login";
ch_pass="password";
 
this->ClientSocket1->Address = this->Memo1->Lines->Strings[this->curr_IP];
this->ClientSocket1->Port = port;
 
Start_connect();
}
Затем жду события OnConnect и в нем делаю запрос. Шапка изменена по некоторым соображениям
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void __fastcall TForm4::ClientSocket1Connect(TObject *Sender, TCustomWinSocket *Socket)
{
this->Memo2->Lines->Add(">>  Соедение установлено");
//Соединие
if(this->RadioButton2->Checked == true)
    {
    TStringList * list = new TStringList();
    list->Add("GET /userCheck HTTP/1.1");
    list->Add("\r\n");
    ClientSocket1->Socket->SendText(list->Text);
    delete list;
    }
}
Если IP недоступен, то срабатывает событие OnError. Я выключил вывод ошибок, т.к. они нам ни к чему.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void __fastcall TForm4::ClientSocket1Error(TObject *Sender, TCustomWinSocket *Socket,
          TErrorEvent ErrorEvent, int &ErrorCode)
{
//Ошибка
ErrorCode = 0;
ClientSocket1->Active = false;
this->Memo2->Lines->Add(">>  Ошибка");
 
this->Memo2->Lines->Add(this->Memo1->Lines->Strings[this->curr_IP]+" не доступен");
curr_IP++;  //Берем следующий IP
if(curr_IP<vsego_IP)    //Проверяем, не вышли за пределы
    {
    this->ClientSocket1->Active = false;  //На всякий, отключам соединение
    //Берем новый IP и заносим в настройки КлиентСокет
    this->ClientSocket1->Address = this->Memo1->Lines->Strings[this->curr_IP];
    //Стартуем соедение
    Start_connect();
    }
}
Но если соедение установилось и сделали запрос. Ответ словим по событию OnRead
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm4::ClientSocket1Read(TObject *Sender, TCustomWinSocket *Socket)
{
this->Memo2->Lines->Add(">>  Получен ответ");
//Читаем что пришло в строку
String InResult=this->ClientSocket1->Socket->ReceiveText();
//И нализируем ответ
if(InResult.Pos(">333<")!=0) Memo2->Lines->Add("Режим работы 1");
if(InResult.Pos(">444<")!=0) Memo2->Lines->Add("Режим работы 2");
//Закрываем соедение
this->ClientSocket1->Close();
}
И по событию OnDisconnect подлючаемся дальше, если перебрали не все IP
C++
1
2
3
4
5
6
7
8
9
10
void __fastcall TForm4::ClientSocket1Disconnect(TObject *Sender, TCustomWinSocket *Socket)
{
this->Memo2->Lines->Add(">>  Соединие закрыто");
curr_IP++;
if(curr_IP<vsego_IP)
    {
    this->ClientSocket1->Address = this->Memo1->Lines->Strings[this->curr_IP];
    Start_connect();
    }
}
И конечно же, сама функция активации соеденения
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm4::Start_connect()
{
this->ClientSocket1->Address = this->Memo1->Lines->Strings[this->curr_IP];
this->ClientSocket1->Port = port;
 
try
    {
    this->Memo2->Lines->Add(">>  Соединие с "+this->Memo1->Lines->Strings[this->curr_IP]);
    ClientSocket1->Open();
    }
catch(...)
    {
    //ClientSocket1->Close();
    }
}
Проблема возникает при попытке подключения к другому IP после удачного соедения с предыдущим.
Если IP не доступен, то по событию ошибки без проблем переходим к тестированию следующего IP.

Какие мысли есть???
Заранее спасибо всем!!!

Добавлено через 23 часа 7 минут
Проблему решил сам. Путем добавления таймера.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2015, 10:10
Ответы с готовыми решениями:

Возможно ли с помощью ServerSocket и ClientSocket реализовать интернет чат
Возможно ли с помощью ServerSocket&amp;ClientSocket реализовать интернет чат? что...

Множества. Проверка множества на наличие элемента в нем
Во многих задачах сталкиваюсь с одной и той же проблемой: Нужно создать...

Проверка множества условий
Как организовать проверку множества условий с реакцией на каждую их комбинацию?...

Проверка на включение, множества
Есть двусвязный список в котором объявляем 2 множества, и нужно организовать...

Проверка множества на антисимметричность
Напишите пожалуйста программу которая проверяет антисимметричность множества....

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2015, 10:10

Изобразить с помощью диаграмм Эйлера-Венна множества
Изобразите с помощью диаграмм Эйлера-венна множества:

С помощью кругов Эйлера изобразить заданные множества
С помощью кругов Эйлера изобразите множества А∪В∩(А∖С) Я не пойму,это три...

Проверка истинности утверждения множества
Добрый день, прошу помочь с проверкой истинности утверждения множества :) ...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru