Программирование сокетов
Начал изучение такой вещи, как сокеты. В сетях я полный чайник, поэтому сразу же возникло множество вопросов.
1. Допустимо, необходимо организовать обмен данными между 2-мя приложениями на разных компах (по протоколу TCP/IP). В этом случае:
a) достаточно ли для этого просто наличия подключения к Internet у обоих компов? Или нужно какое-то дополнительное программное обеспечение, например для компа, который будет сервером?
b) есть ли разница между сокетами Linux и Windows (WinSocks), могут ли обмениваться данными Linux и Windows-приложения?
c) IP-адрес получить несложно, а вот какой порт выбрать? Должны ли клиент и сервер использовать одинаковый порт? Что делать, если порт окажется закрыт фаерволлом?
2. Теперь следующая ситуация - нужно создать приложение типа клиент-сервер. Допустим, серверная программа написана на PHP и будет размещена на каком-нибудь хостинге, а клиентская - на C++ для Windows/Linux и запускаться с компа пользователя. Опять же вопрос, какой порт использовать?
3. Можно ли использовать сокеты в локальной сети?
4. Последний вопрос про скорость обмена при использовании сокетов. Достаточно ли этой скорости, например, для игр (шутеров или MMORPG)? Или в этом случае нужно использовать другие средства (DirectPlay и др.)?
Кстати, что тема делает в разделе web программирование - она к нему отношения не имеет. перенесите в общие вопросы.
1. Допустимо, необходимо организовать обмен данными между 2-мя приложениями на разных компах (по протоколу TCP/IP). В этом случае:
a) достаточно ли для этого просто наличия подключения к Internet у обоих компов? Или нужно какое-то дополнительное программное обеспечение, например для компа, который будет сервером?
Достаточно просто сети и прямого доступа между ними. Internet частный случай сети.
b) есть ли разница между сокетами Linux и Windows (WinSocks), могут ли обмениваться данными Linux и Windows-приложения?
Во всех этих системах есть реализация стека протоколов TCP/IP (раз уж они могут работать с интернетом, который этот стек использует). А протоколы, он та то и протоколы - что описывают строго правила взаимодействия на разном уровне от физического до прикладного. И кто их использует - неважно, лишь бы правильно.
Разница в API для работы с сокетами есть небольшая, но все они основанны на беркли-сокетах и по сути мало чем отличаются.
c) IP-адрес получить несложно, а вот какой порт выбрать? Должны ли клиент и сервер использовать одинаковый порт?
Порт нужно задавать серверу, чтобы клиент мог указать на какой порт коннектица на заданном хосте (ведь не одна твоя программа сетевая там может быть запущенна). Порт выбирай выбирай любой который хочется выше 1024, желательно не пересекающийся с общепринятыми портами известных приложений.
Что делать, если порт окажется закрыт фаерволлом?
Обламываться или открыть в файрволе.
Допустим, серверная программа написана на PHP и будет размещена на каком-нибудь хостинге,
Какой ужас, кто надоумил на нем сервак писать?
а клиентская - на C++ для Windows/Linux и запускаться с компа пользователя. Опять же вопрос, какой порт использовать?
Подключаться к порту, который слушает сервер. Какой локальный порт сокету даст система - не важно.
3. Можно ли использовать сокеты в локальной сети?
Если она на основе стека TCP/IP. В этом случае она ничем не отличается от интернета, кроме разве что диапазона ip адресов локального.
4. Последний вопрос про скорость обмена при использовании сокетов. Достаточно ли этой скорости, например, для игр (шутеров или MMORPG)? Или в этом случае нужно использовать другие средства (DirectPlay и др.)?
А как по твоему происходит любой обмен по сети в том числе и игр? ))) именно через сокеты. А скорость от реализации и устройства твоего протокола будет зависеть. )))
И то, диапазон ip не обязателен. ))
Порт нужно задавать серверу, чтобы клиент мог указать на какой порт коннектица на заданном хосте (ведь не одна твоя программа сетевая там может быть запущенна). Порт выбирай выбирай любой который хочется выше 1024, желательно не пересекающийся с общепринятыми портами известных приложений.
Хотел бы немного уточнить.
0-1023 являются общеизветными портами, 1024-49151 зарегистрированными (см. RFC4340 п. 19.9, реестр этих портов находиться в IANA, список тут: http://www.iana.org/assignments/port-numbers ), 49152-65535 динамические. На своем сервере можно повесить работу сервера на любой порт. Хоть ниже 1023 порта, но этого делать не рекомендуется.
Поэтому похорошему в ходе опытов стоит работать с портами выше 49151-ого.
ну ты прям как стивенс (покойный кста вроде уже) - прибил мля твое сообщение над кроватью - читаю перед сном :)
по сетевому программированию надо наверное написать цикл статей - начиная от использования сокетов и до высокоуровневых - типа фтп и веб. правда один хрен наши посетители кроме порножурналов читать ничего не читают. особенно Ден Зурин судя по всему. иначе трудно объяснить - зачем тему размещать в веб-программировании - и почему не использовать поиск - однозначно руки постирал нафик.
не дождетесь :)