Программирование сокетов accept () на C - PullRequest
1 голос
/ 02 мая 2011

Хорошо, я новичок в программировании сокетов, и моя программа ведет себя не так, как я ожидал.Во всех примерах программирования сокетов, которые они используют, они принимают accept (), а весь код после предполагает, что соединение установлено.

Но мой accept () вызывается, как только я запускаю сервер.Это должно случиться?Или сервер должен ожидать соединения перед выполнением остальной программы?

РЕДАКТИРОВАТЬ: К сожалению, я забыл упомянуть, что это TCP-соединение.

Ответы [ 3 ]

0 голосов
/ 02 мая 2011

Для сервера вы:

  • Создаете сокет - socket().
  • Привязываете его к адресу.
  • Вы вводите цикл, в которомВы:
    • Прослушайте попытки подключения
    • Примите и обработайте их

Из вашего описания не ясно, делаете ли вы все этишаги.

Для этапа «обработать их» существует несколько опций, в зависимости от того, планируете ли вы обрабатывать однопоточный однопоточный процесс одним запросом перед обработкой следующего, илипланируете иметь многопоточный одиночный процесс с одним потоком, принимающим запросы и создающим другие потоки для выполнения обработки (пока один поток ожидает следующего входящего соединения), или планируете ли вы иметь ветвь процесса с дочерним процессором, обрабатывающимновый запрос, пока родитель возвращается к прослушиванию следующего запроса.

0 голосов
/ 02 мая 2011

Вы должны войти в свой цикл приема после того, как начали прослушивать соединения.Используйте select(), чтобы определить, когда ожидающее соединение клиента готово к принятию, затем позвоните accept(), чтобы принять его.

0 голосов
/ 02 мая 2011

Я думаю, что это то, что вам нужно.

http://www.sockets.com/winsock.htm#Accept

Основная концепция программирования winsocket - вы работаете с блокирующими или неблокирующими сокетами.В большинстве случаев, если вы используете блокирующие сокеты, вы можете запросить набор получения сокетов, чтобы выяснить, не приведет ли какой-либо вызов к блокированию вашего вызова подпрограммы.

Начать с этого UDP прощеэто протокол дейтаграмм.TCP, с другой стороны, является потоковым протоколом.Так что легче думать о блоках данных, которые отправляются и принимаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...