Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
11 / 11 / 3
Регистрация: 06.08.2011
Сообщений: 208

Сервер принимает запрос от клиента только 1 раз (windows)

04.06.2016, 23:29. Показов 737. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, как заставить сервер принимать от клиента запрос и ждать следующего.
В моей реализации сервер принимает запрос только единожды.

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
    // connect(c_button, SIGNAL(clicked()), this, SLOT(close()));
     const int MEMORY_SIZE = BUFFER_SIZE * sizeof(char);
 
     char* const pBuffer = (char* const) malloc (MEMORY_SIZE);
     memset(pBuffer, '\0', MEMORY_SIZE); //очистка буфера
 
 
    if ( WSAStartup ( 0x202, ( WSADATA * ) &buff [ 0 ] ))
     { printf ( " WSAStart error %d \n ", WSAGetLastError ( ));  }
 
     // Создаем сокет socket ( int af, int type, int protocol ).
      my_sock=socket(AF_INET, SOCK_STREAM, 0);
      if ( my_sock < 0 ) //
           { printf (" Socket ( ) error %d \n ", WSAGetLastError()); }
 
       // Заполнение структуры sockaddr_in :
             sockaddr_in dest_addr;
             dest_addr.sin_family=AF_INET; //инет коннектинг
             dest_addr.sin_port=htons(PORT); //порт
             dest_addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY); //htons
//htonl - дальняя связь
 
           bind(my_sock, (sockaddr *)&dest_addr,sizeof(dest_addr));
           listen(my_sock, 2); //состояние прослушивания
           int AddrLen = sizeof(ConnectAddr);
 
    // переписать
 
       sockio = accept(my_sock, (struct sockaddr*) &ConnectAddr,&AddrLen);
           if(sockio == INVALID_SOCKET){
               printf("accept failed with erro %ld\n", WSAGetLastError());
               closesocket(my_sock);
               WSACleanup();
             }
           else {
               if(recv(sockio, pBuffer, MEMORY_SIZE - 1, 0) != -1)
               {
                  c_label->setText(pBuffer);
               }
               else{ printf("Recieve data error!\n"); }
 
     shutdown(my_sock, 0);
     closesocket(my_sock);
    // return 0;
   }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.06.2016, 23:29
Ответы с готовыми решениями:

TCP сервер принимает сообщение только 1 раз, как это исправить
TCP сервер принимает сообщение только 1 раз, как это исправить? While (true) { textBox1.Text = R.ReadString(); } приводил к вылету...

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

Сервер не принимает сообщение от клиента
Здравствуйте! Пишу чат на Embarcadero C++Builder XE2. Проблема: не принимает сообщение от клиента. Сам клиент(судя по вылетающему...

2
 Аватар для Nikropolb
55 / 55 / 12
Регистрация: 25.06.2012
Сообщений: 285
Записей в блоге: 1
05.06.2016, 01:40
1) Используй select.
2) Вынеси accept и обработку в обдельные потоки. Здесь есть исходники простого клиент-серверного приложения где реализован такой подход Listen на сервере, и 2 клиента на 1 машине
1
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
06.06.2016, 00:56
Так-то правильно сказано про потоки (У Криса Касперски этот вариант), только мне не понять, что такое select. И пытаюсь уяснить, что значит "заставить сервер принимать от клиента запрос и ждать следующего";

Псевдокод такой вот:

C++
1
2
3
4
5
while (установление соединения)
{
 
    //вызов функции потока
}
В цикле сервер устанавливает соединение с клиентом, потом вызывает функцию потока и поток отдельной сущностью начинает работу с этим же клиентом. Основной же поток сервера ждёт следующего подключения. Так можно насоздавать сколько угодно подключений (ограничения есть по количествам потоков, портов (5000?), сокетов и прочая). Классика от Касперски.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.06.2016, 00:56
Помогаю со студенческими работами здесь

TCP Сервер не принимает данные от клиента
Я использую Ubuntu 16.04 (telnet есть) и Raspberry Pi Zero W. На Ubuntu сервер на Qt, а на RPi клиент. Я на писал сервер на Qt, но он...

Отправить запрос с клиента на сервер
Совершенно не разбираюсь в javascript и node js. Подскажите пожалуйста с чего начать. Надо в браузере при нажатии на кнопку отправлять...

TCP прием от клиента: Сервер считывает 21 байт не за раз, а за 7 циклов
Превью. Лог от сервера И так. От клиента поступают запросы. в среднем от 20 до 30 байт. Первый запрос приходит успешно....

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru