Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Программирование сокетов

30K
15 октября 2008 года
Ден Зурин
28 / / 17.02.2008
Hi all!
Начал изучение такой вещи, как сокеты. В сетях я полный чайник, поэтому сразу же возникло множество вопросов.
1. Допустимо, необходимо организовать обмен данными между 2-мя приложениями на разных компах (по протоколу TCP/IP). В этом случае:
a) достаточно ли для этого просто наличия подключения к Internet у обоих компов? Или нужно какое-то дополнительное программное обеспечение, например для компа, который будет сервером?
b) есть ли разница между сокетами Linux и Windows (WinSocks), могут ли обмениваться данными Linux и Windows-приложения?
c) IP-адрес получить несложно, а вот какой порт выбрать? Должны ли клиент и сервер использовать одинаковый порт? Что делать, если порт окажется закрыт фаерволлом?
2. Теперь следующая ситуация - нужно создать приложение типа клиент-сервер. Допустим, серверная программа написана на PHP и будет размещена на каком-нибудь хостинге, а клиентская - на C++ для Windows/Linux и запускаться с компа пользователя. Опять же вопрос, какой порт использовать?
3. Можно ли использовать сокеты в локальной сети?
4. Последний вопрос про скорость обмена при использовании сокетов. Достаточно ли этой скорости, например, для игр (шутеров или MMORPG)? Или в этом случае нужно использовать другие средства (DirectPlay и др.)?
353
15 октября 2008 года
Nixus
840 / / 04.01.2007
С такими знаниями ты ничего не напишешь. Начни с изучения принципов построения сетей, почитай к примеру Таненбаума.
12
15 октября 2008 года
alekciy
3.0K / / 13.12.2005
Мне кажется, что Стивенс У.Р. UNIX. Разработка сетевых приложений будет предпочтительнее. Там очень хорошо расписаны механизмы работы TCP/IP стека.
240
16 октября 2008 года
aks
2.5K / / 14.07.2006
Во превых, действительно изучи все же сначала основы сетевых технолгий, прежде чем браться за сетевое программирование.
Кстати, что тема делает в разделе web программирование - она к нему отношения не имеет. перенесите в общие вопросы.

Цитата: Ден Зурин
Hi all!
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 и др.)?


А как по твоему происходит любой обмен по сети в том числе и игр? ))) именно через сокеты. А скорость от реализации и устройства твоего протокола будет зависеть. )))

353
16 октября 2008 года
Nixus
840 / / 04.01.2007
Цитата: aks
В этом случае она ничем не отличается от интернета, кроме разве что диапазона ip адресов локального.


И то, диапазон ip не обязателен. ))

240
16 октября 2008 года
aks
2.5K / / 14.07.2006
Ну всмысле IP адреса в локальной сети - из локальных диапазонов, а не реальные. )
12
16 октября 2008 года
alekciy
3.0K / / 13.12.2005
Цитата: aks

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


Хотел бы немного уточнить.

0-1023 являются общеизветными портами, 1024-49151 зарегистрированными (см. RFC4340 п. 19.9, реестр этих портов находиться в IANA, список тут: http://www.iana.org/assignments/port-numbers ), 49152-65535 динамические. На своем сервере можно повесить работу сервера на любой порт. Хоть ниже 1023 порта, но этого делать не рекомендуется.

Поэтому похорошему в ходе опытов стоит работать с портами выше 49151-ого.

1
16 октября 2008 года
kot_
7.3K / / 20.01.2000
Цитата: aks
Ну всмысле IP адреса в локальной сети - из локальных диапазонов, а не реальные. )


ну ты прям как стивенс (покойный кста вроде уже) - прибил мля твое сообщение над кроватью - читаю перед сном :)
по сетевому программированию надо наверное написать цикл статей - начиная от использования сокетов и до высокоуровневых - типа фтп и веб. правда один хрен наши посетители кроме порножурналов читать ничего не читают. особенно Ден Зурин судя по всему. иначе трудно объяснить - зачем тему размещать в веб-программировании - и почему не использовать поиск - однозначно руки постирал нафик.

12
16 октября 2008 года
alekciy
3.0K / / 13.12.2005
[COLOR="Gray"]Позравляю с выходом на пэнсию! :D[/COLOR]
1
17 октября 2008 года
kot_
7.3K / / 20.01.2000
Цитата: alekciy
[COLOR="Gray"]Позравляю с выходом на пэнсию! :D[/COLOR]


не дождетесь :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог