Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> IRC - алгоритм постоянного коннекта 
:(
    Опции темы
sOckets
Дата 27.8.2006, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



Здравствуйте , в общем я пишу IRC бота , вроде бы я научился конектиться , отправлять сообщения, отвечать на ПИНГи сервера....но ! я не могу удержать коннект , то есть допустим я запустил у себя бота , он висит на канале , выполняет свои функции , и тут у меня модем переподключился , бах и бот пропал , приходиться перезапускать его....помогите написать алгоритм постоянного коннекта.
Вот что я использую , скажите правильно или нет (хотя не пашет =\)
Код

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
    while (1)
    {
        while(CONNECTED==false) CONNECT_TO_SERVER();                // Соединяемся с сервером
        RESTART_GET_();                                            // Читсим буфер приёма
        RESTART_POST_();                                            // Чистим буфер отпавки
        ADMIN=false;                                                    // Пока админа у нас нету
        recv(S, RESIVE, 1024, 0);                                            // Получаем данные от сервера
        IFPING(RESIVE);                                                // Если это PING то отвечаем
        ISADMIN();                                                    // Проверяем права админа
        if (ADMIN==true) 
        {
            strcpy(COMMAND,strstr(RESTART_GET_,"PRIVMSG ")+(11+strlen(CHANNEL)));// выдёргиваем команду
        }
        exec_cmd(COMMAND);                                                // выполняем команды
    }
return 0;
}




Это сообщение отредактировал(а) ilovewinsocks - 27.8.2006, 18:37


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
sOckets
Дата 27.8.2006, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



модеры удалите дубликат темы , "интернет заглючил" у меня... smile 


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
sOckets
Дата 28.8.2006, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



Код

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
    while (1)
    {
    while(InternetGetConnectedState(&connected_to_inet, 0) == FALSE) {
        Sleep(50000);
    }
        while(CONNECTED==false) CONNECT_TO_SERVER();                // Соединяемся с сервером
        RESTART_GET_();                                            // Читсим буфер приёма
        RESTART_POST_();                                            // Чистим буфер отпавки
        ADMIN=false;                                                    // Пока админа у нас нету
        recv(S, RESIVE, 1024, 0);                                            // Получаем данные от сервера
        IFPING(RESIVE);                                                // Если это PING то отвечаем
        ISADMIN();                                                    // Проверяем права админа
        if (ADMIN==true) 
        {
            strcpy(COMMAND,strstr(RESTART_GET_,"PRIVMSG ")+(11+strlen(CHANNEL)));// выдёргиваем команду
        }
        exec_cmd(COMMAND);                                                // выполняем команды
    }
return 0;
}


Это сообщение отредактировал(а) ilovewinsocks - 28.8.2006, 00:33


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
bel_nikita
Дата 28.8.2006, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 1
Всего: 47



а что за константы такие CONNECTED и др?


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
sOckets
Дата 28.8.2006, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



CONNECT_TO_SERVER(); если не подключает то делает CONNECTED=FALSE; изначально CONNECTED=FALSE;


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
sOckets
Дата 1.9.2006, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



Вопрос не решён. Если обрываеться связь с инетом , программа всё равно весит на RECV smile как решить ?


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
0x00
Дата 6.9.2006, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 3.4.2006

Репутация: нет
Всего: нет



такой алгорит написать нельзя!!! т.к. ирц сервер, на котором висит твой бот отправляет ему PING на что твой бот должет ответить PONG, и если твой бот на него не ответит, то сервер посчитает, что он не в сети и сам отключит его...
PM MAIL   Вверх
sOckets
Дата 6.9.2006, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



умник
Код

IFPING(RESIVE);                                                // Если это PING то отвечаем

Это я для кого написал ? Ты думаешь я не знаю IRC RFC ?


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
Artemon
Дата 6.9.2006, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 1
Всего: 20



Неблокирующие сокеты лучше не использовать.
Лучше всего в отдельном потоке организуй с помощью select таймаут.

вот ф-ии для реализации TimeOut

Код

  bool MySocket::TimeOutRead(DWORD MiliSec)const
{
  if( !S ) return true;

  int rc;

  fd_set  readfd;
  timeval tv;

  FD_ZERO( &readfd );
  FD_SET ( S, &readfd );

  tv.tv_sec  = MiliSec/1000;
  tv.tv_usec = 0;

  rc = select( NULL, &readfd, NULL, NULL, &tv );
  if ( rc <= 0 ) return true; // -1 error, 0 - timeout
  else           return false; // OK
}
//---------------------------------------------------------------------------
  bool MySocket::TimeOutWrite(DWORD MiliSec)const
{
  if( !S ) return true;

  int rc;

  fd_set  writefd;
  timeval tv;

  FD_ZERO( &writefd );
  FD_SET ( S, &writefd );

  tv.tv_sec  = MiliSec/1000;
  tv.tv_usec = 0;

  rc = select( NULL, NULL, &writefd, NULL, &tv );
  if ( rc <= 0 ) return true; // -1 error, 0 - timeout
  else           return false; // OK
}



--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
sOckets
Дата 6.9.2006, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



Мне посоветовали юзать неблокирующие.


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
Artemon
Дата 7.9.2006, 06:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 1
Всего: 20



Я не говорю что их вообще нельзя использовать, я говорю, что лучше на мой взгляд использовать блокирующие по следующей причине:

1) Ты с клиента послал на сервер число типа DWORD, но из-за низкой скорости сети пришла только первая часть WORD, как ты будешь получать вторую часть? (конечно это можно реализовать, но опять повторюсь, лучше использовать блокирующие сокеты).


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.3384 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.