C ++ Winsock - принять () - PullRequest
       24

C ++ Winsock - принять ()

0 голосов
/ 16 января 2011

Я начал изучать Winsock на C ++, и у меня возникли некоторые проблемы. Я начал с примера Winsock на MSDN (базовый клиент-сервер). http://msdn.microsoft.com/en-us/library/ms738545(v=vs.85).aspx

Когда я собираю и запускаю код, я получаю вывод:

Client.exe

Отправлено 14 байт.
Соединение закрыто.

Server.exe

Ничего не происходит в окне cmd Server.exe. Я понятия не имею, что я делаю неправильно. Я новичок в Winsock, но, насколько я могу сказать, в файле Server.cpp скажите, что функция accept () никогда не возвращается.

Любая помощь / указатели приветствуются.
Заранее спасибо, Том.

РЕДАКТИРОВАТЬ Код можно найти по вышеуказанной ссылке MSDN. Прокрутите страницу вниз для кода для Клиента и Сервера.

1 Ответ

1 голос
/ 17 января 2011

Похоже, ваш клиент не подключился к серверу.Это связано с чем-то, но, возможно, не ваш сервер.Вот некоторые вещи, на которые я бы посмотрел:

  1. Жесткий код IP-адреса сервера в клиенте.

  2. Сервер прослушивает только IPv4но клиент попробует и IPv4 и IPv6.Должно быть в порядке, но я рекомендую устранить эту двусмысленность на этом этапе.В клиенте, где указано AF_UNSPEC, измените его на AF_INET.

  3. Проверьте, прослушивает ли что-нибудь еще порт 27015 (возможно, на IPv6).Запустите netstat.exe, чтобы увидеть, какие сокеты используются.

  4. Используйте обычный старый telnet для подключения к вашему серверу.Если он подключается, наберите что-нибудь и нажмите ввод, и посмотрите, как ведет себя сервер.

  5. Избавьтесь от вызова shutdown(ConnectSocket, SD_SEND) в клиенте.Все должно быть в порядке, но это кажется мне немного необычным - я никогда не выключал только одно направление на сокете, я всегда использую SD_BOTH, когда я полностью закончил с сокетом.

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

Удачи!

...