Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 1
Регистрация: 23.03.2015
Сообщений: 78
1

Проверить, подключен ли клиент к серверу

22.01.2016, 07:53. Показов 957. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Извиняюсь за возможно глупый вопрос, но ничего внятного я не нашел.
Пишу программу, которая будет собирать данные детализации звонков с АТС по протоколу TCP (CDR или SMDR, если кто в курсе) и уткнулся в одну проблему. Я не могу детектировать прерывание связи с АТС. Если сеть отваливается, то данная функция зависает во втором цикле, так как сокет нужно открыть по-новой.
Подскажите, как решаются проблемы такого рода?
Как детектировать прерывание связи с удаленной стороной из-pf временного обрыва сети или перезагрузкой программы на дальней стороне?

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
void tcp_collect(settings* config)
{
    
    char buf[MAX_MESSAGE];            // maximum single datagram
    char buffer[MESSAGE_BUFFER];      // buffer to collect datagrams
    char message[MAX_MESSAGE] = "\0";
    struct sockaddr_in serv_addr, cli_addr;
    int n;
 
    while (TRUE) 
        {
 
        int sockfd, newsockfd;
        socklen_t clilen;
        sockfd = socket(AF_INET, SOCK_STREAM, 0);
        if (sockfd < 0)
        {
           error("Ошибка открытия сокета");
        } 
        bzero((char *) &serv_addr, sizeof(serv_addr));
        serv_addr.sin_family = AF_INET;
        serv_addr.sin_addr.s_addr = INADDR_ANY;
        serv_addr.sin_port = htons(config->port);
        if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
        {
            error("Ошибка привязки сокета");  
        }       
        listen(sockfd,5);
        clilen = sizeof(cli_addr);
        newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
        if (newsockfd < 0)
        { 
            error("ERROR on accept");
        }
 
        int nread;
        
        while (TRUE)
        {
            bzero(buf, MAX_MESSAGE);
            nread = read(newsockfd, buf, sizeof(buf) - 1);
            if (nread == 0)  continue;
            if (nread < 0)
            {            
                error("ERROR reading from socket");
                break;
            }
            if (config->flag_dump) 
            {
                fappend(config->dump, buffer);
            }
            buf[nread] = '\0';                           // finishing message
            //TODO защитить от переполнения
    //        strcat(buffer, buf);                         // add recieved piece of data to buffer
   
            // get all messages from buffer
    /*        while(get_message(config, buffer, message))
            {
                cout << message << endl << endl; //TODO вместо этого отправляем message в БД
            }*/
            //if (recv())
        }
        close(newsockfd);
        close(sockfd);
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.01.2016, 07:53
Ответы с готовыми решениями:

Сцена зависает при запуске TCP-клиента, когда он подключен к TCP - серверу, при этом TCP-клиент полностью функционирует
Проблема описана в заголовке, и хотелось бы услышать ваше мнение, о том как можно решить проблему....

Клиент/сервер: клиент посылает серверу слово; определить, является ли это слово палиндромом
Осуществить взаимодействие клиента и сервера на основе протокола TCP/IP. Функционирование клиента и...

Проверить подключен ли сокет
Здравствуйте! Подскажите, как проверить, подключено ли еще приложение на другой стороне к сокету?...

Проверить подключен ли интернет
Необходимо проверить есть ли соединение с интернетом. Пробовал использовать ping, но при отсуствии...

0
22.01.2016, 07:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.01.2016, 07:53
Помогаю со студенческими работами здесь

Проверить, нормально ли подключен SDL
В качестве первой программы под SDL2 написал такую пустышку, которая должна проверить , нормально...

Проверить, подключен ли сетевой диск
проверить подключен ли сетевой диск, (\\server\serv) на диске (K: ), если подключен, то выдать...

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

Проверить, подключен ли интернет, если выдернут шнур из роутера
то есть в этом случае нужно отправить http запрос на сервер провайдера или как в этом случае...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru