http://ru.wikipedia/wiki/%D0%A2%D0%B5%D0%BB%D0%B5%D1%84%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D1%8C_%D0%BE%D0%B1%D1%89%D0%B5%D0%B3%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8Fgt;, а серверні - з комутаторами lt;http://ru.wikipedia/wiki/%D0%A2%D0%B5%D0%BB%D0%B5%D1%84%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%BC%D0%BC%D1%83%D1%82%D0%B0%D1%82%D0%BE%D1%80gt;. Клієнтський додаток (наприклад, браузер lt; https: //ru.wikipedia/wiki/%D0%91%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80gt;) використовує тільки клієнтські сокети, а серверне (наприклад, веб-сервер lt; https: //ru.wikipedia/wiki/%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1 % 80% D0% B2% D0% B5% D1% 80 gt ;, якому браузер посилає запити) - як клієнтські, так і серверні сокети.
Виділяють два типи socketов: потоковий socket (SOCK_STREAM) і, так званий, дейтаграммний socket (datagram socket, SOCK_DGRAM). Потоковий варіант розроблений для додатків, які потребують надійному з'єднанні і часто использующем тривалі потоки даних. Протокол, що використовується для даного типу socketов - TCP. У цьому матеріалі буде використовуватися тільки потоковий тип socketов, тому він найчастіше використовується в добре відомих протоколах, таких як SMTP, POP3, HTTP, TCP.
дейтаграмному socketи використовують UDP протокол і мають низький сигнал з'єднання і великий розмір буфера даних. Вони застосовуються в додатках, які відправляють дані малих розмірів і не потребують ідеальної надійності. На відміну від потокових socketов, дейтаграмному socketи не гарантують стовідсоткової передачі даних одержувачу, як і не гарантують передачі даних в потрібному порядку. Даний тип socketов корисніше для додатків, де надійність не є високим пріоритетом, таким як швидкість (наприклад аудіо чи відео трансляція). У додатках, які потребують надійності, доцільніше використовувати потокові сокети.
Зв'язування (binding) socketов. Зв'язати socket значить «прикріпити» певну адресу (IP адреса і номер порту) до даного socketу. Це можна зробити вручну, використовуючи зв'язує функцію, але в деяких випадком WinSock сам автоматично зв'яже socket.
З'єднання
Спосіб використання socketов залежить від того, де ти їх використовуєш: на клієнтській або серверної частини. Клієнтська частина створює з'єднання шляхом створення socketа і викликом з'єднує функції з певною адресною інформацією. До того як socket не з'єднається, він не буде пов'язаний з адресою. Це пов'язано з тим, що клієнт може використовувати будь-яку адресу (IP адреса і номер порту) для з'єднання з сервером.
Коли з'єднання викликано, WinSock вибере IP адреса і номер порту для з'єднання і пов'яже з ними socket до того, як клієнт фактично з'єднається з сервером. Номером порту може бути будь-який номер, який вільний у момент з'єднання, з вибором IP адреси треба бути акуратніше. Комп'ютери можуть мати більше одного IP адреси. Наприклад, комп'ютер, підключений до локальної мережі та до інтернету, має три IP адреси: зовнішній для використання інтернету; адреса в локальній мережі (192.168.xx або 10.0.xx і т.д.); адресу, так званої «внутрішньої петлі» (loopback), для позначення «локального хоста» в мережі з одного комп'ютера (127.0.0.1). Тут вибір IP адреси, з яким пов'язаний socket, має значення, тому що також визначає мережу, яку ти використовуєш для з'єднання. Якщо ти хочеш підключитися до локального комп'ютера 192.168.0.4, ти не зможеш зробити це через мережу інтернет провайдера. Тобі буде потрібно зв'язати socket з Вашим IP адресою в такій же мережі (192.168.0.1, наприклад).
На щастя, WinSock сам вибере IP адреса на твоєму комп'ютері, який може використовуватися для з'єднання з потрібним адресою. Нічого не заважає тобі зв'язати socket самостійно, але пам'ятай, що ти повинен взяти ситуацію, описану вище, до уваги. Так само зв'язує функція дає користувачеві можливість встановити IP адресу або номер порту в нульове значення. У цьому випадком нульове значення означає «нехай WinSock вибере щось для мене». Це корисно, коли ти хочеш підключитися, використовуючи певний IP адресу, але, що не вказуючи значення порту.
Прослуховування
На «стороні» сервера справи йдуть трохи інакше. Сервер чекає вхідних з'єднань і клієнтові необхідно знати IP адреса і номер порту сервера, щоб встановити з'єднання. Щоб спростити справу, на сервері завжди використовується фіксований номер порту (зазвичай це - порт, передбачений протоколом за замовчуванням).
Очікування вхідного з'єднання за певною адресою називається прослуховуванням (listening). Зазвичай, перед тим як «увійти» в режим прослуховування, socket повинен бути пов'язаний з певною адресою. Коли номер порту цієї адреси встановлений і зафіксований (тобто не зміниться), сервер починає чекати вхідні з'єднання з цього порту. Наприклад, 80 порт (порт за замовчуванням для HTTP) прослуховується більшістю серверів.
Коли клієнт запитує з'єднання з сервером, сервер дозв...