сокетное 02.06.11 02:41 // оригинал
Последняя лаба третьего курса, простенькое взаимодействие между консольным сервером и диалоговым клиентом через сокеты. Как обычно, первые сдающие проскакивают без строго соответствия требованиям (традиционная привилегия первых рядов), дальше начинается развлекуха. Отдельный цирк - хоровая сдача голых сокетов при том, что на лекциях давалась только MFCшная обертка, ну это ладно, даже веселее. Долго терпел клоны, наконец стал жестко требовать обязательного ответа сервера с передачей подтверждений или всякой полезной информации типа количества потоков. Дальше конвейер - смотрю в код серверной оберточной функции Receive (имя условное), наблюдаю отсутствие send после recv (и аналогичного симметричного recv в условной клиентской Send), отправляю пациента на следующую итерацию.
И вот подтянулась следующая итерация, и у меня аж на несколько минут закончились слова. В этой новой вершине студенческой мысли народ, видимо, побоялся трогать запредельные для своего понимания внутренности оберточных функций и воспринял их как пришедшие на руки карты, с которыми и нужно играть. В результате в ситуациях, когда сервер что-то должен ответить, происходит милый финт ушами - клиент прикидывается сервером, запуская Receive (ее реализация - отдельная песня, при каждом ее вызове происходит полный жизненный цикл серверного сокета, от создания до закрытия), сервер клиентом и шлет ответ через оберточную Send на фиксированный адрес 127.0.0.1 (клиенты ж всегда с локалхоста приходят).