Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти количество денег, необходимое Пете, чтобы купить 3 целых упаковки конфет http://www.cyberforum.ru/cpp-beginners/thread1644632.html
В магазине ириски продаются только в упаковке, по 30 штук, и стоят 60 рублей. Пионеру Пете нужно 3 целых упаковки(90 конфет), зачем - никто не знает. Одноклассники подарили/поменялись на ириски, и теперь у Пети есть X конфет. Сколько ему нужно денег, чтобы у него было 3 целых упаковки? Задачу сам придумал :D, просто так быстрее объяснить... Уже час у меня просто ступор... 90 - Х = Y...
C++ Подскажите книгу по Visual C++ Занимался раньше Delphi и небольшие учебные задачки делал на С, С++. Есть книга Бобровского по Delphi где вкратце дано описание языка а потом описаны все компоненты и как работать, размещать их в визуальной среде Delphi 7. Хотелось бы не тратить время на качание неполных книг- подскажите пож книгу и как называется к ней сам С++ (Visual C++, Builder или Ambacardero C++ чтобы скачать) где легко... http://www.cyberforum.ru/cpp-beginners/thread1644600.html
C++ Найти причины и способы устранения ошибок в коде
Прошу Вашей помощи. Я только начинаю изучать С++. Пытаюсь создать программу а он выдает ошибки 1>------ Сборка начата: проект: Проект11, Конфигурация: Debug Win32 ------ 1> Исходный код.cpp 1>d:\1\hello\проект11\проект11\исходный код.cpp(22): warning C4390: ";": обнаружен пустой контролируемый оператор; это правильно? 1>d:\1\hello\проект11\проект11\исходный код.cpp(23): error C2181:...
Как реализовать запрос на повторный ввод в цикле while C++
Всем Доброго времени суток! Помогите, пожалуйста новичку справиться с задачей. Условие задачи требует вывести на консоль необходимое количество выбранных символов в горизонтальной или вертикальной строке. Все три показателя (вид символа, количество символов, расположение символов в строке) вводит пользователь. С этим, кажется, справился. Один раз программа исполняется. А вот как реализовать...
C++ Нарисовать заданное количество точек окружности, равноудалённых друг от друга http://www.cyberforum.ru/cpp-beginners/thread1644571.html
Ребят, помогите! Делаю исследовательскую работу по математике и встал в ступор при первой же проблеме! Юзаю GLUT. Нужно нарисовать n точек окружности, равноудалённых друг от друга. Думаю использовать уравнение прямой, чтобы находить точки, но что-то мне подсказывает, что есть метод проще. Пример:
C++ Составить программу, в которой с помощью процедуры вывести матрицу Составить программу, в которой с помощью процедуры вывести матрицу(любую). подробнее

Показать сообщение отдельно
bonanza
1 / 1 / 0
Регистрация: 23.03.2015
Сообщений: 19
22.01.2016, 07:53     Проверить, подключен ли клиент к серверу
Извиняюсь за возможно глупый вопрос, но ничего внятного я не нашел.
Пишу программу, которая будет собирать данные детализации звонков с АТС по протоколу 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);
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 18:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru