Задать вопрос

С++.Работа с сокетами?

Делаю все как положено,открываю сокет на клиенте и сервере..доходит до момента когда сервер приложение должно прослушать клиент(для этого использую функцию recv),проблема в том что я ее закинул в таймер и когда он должен выполнить ее,он тупо зависает и ждет пока что-то придет,ломаю голову не знаю как правильно решить эту задачу,в гугле уже надоело искать.
  • Вопрос задан
  • 4185 просмотров
Подписаться 4 Оценить Комментировать
Решения вопроса 1
Deerenaros
@Deerenaros
Программист, математик, задрот и даже чуть инженер
А что за реализация и какой API? Банально потому, что C++ по дефолту (стандарту) не умеет работать с сокетами. Особенно, если учесть некоторые различия в их (сокетах) реализациях на разных платформах (будучи POSIX на unix'ах, POSIX-like на linux'ах и что-то забавное и на Windows и kolibri OS. В общем, сокеты Беркли должны помочь, наверное. А вообще, неблагодарное это дело - юзать сокеты из Си++ вне фреймворков. Лучше C#.NET, Java, Python: здесь всё для людей. Ну а если важны плюсы при Си, то можно воспользоваться невероятным Qt.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Гугли select, fcntl и O_NONBLOCK.
Ответ написан
Комментировать
bogolt
@bogolt
По умолчанию все операции с сокетами - блокирующие. Это означает что пока операция не выполнится код не пойдет дальше.
Методов решения этой проблемы много:
- использовать неблокирующие сокеты
- использовать неблокирующий вызов select
- выделить все в отдельный поток ( плохой метод, потом замучаетесь разбираться почему крэшится ).

Советую почитать руководство по сетевому программированию, ну или хотя бы посмотреть на код клиента и сервера. beej.us/guide/bgnet/output/html/multipage/index.html
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы