Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / kNet, сокеты.

kNet, сокеты.

Поделиться

Страницы: 1 2 3 Следующая

SkyDevПостоялецwww5 мая 201712:10#0
Hello world! Кто-нибудь может скинуть пример использования Socket объекта на прямую? Задача отправить пакет на 255.255.255.255/PORT что-бы все в локальной сети получили пакет. Как провернуть подобное через kNet?
ZabПостоялецwww5 мая 201712:31#1
255.255.255.255 - адрес для общения исключительно с роутером локальной сети. Для броадкастов надо другой использовать.
SkyDevПостоялецwww5 мая 201713:30#2
Zab
Что ты имеешь ввиду " исключительно с роутером локальной сети". Что делает роутер получив пакет с таким адресатом?

Ты имел ввиду этот широковещательный адрес?

к адресу подсети прибавляется побитовая инверсия маски подсети (то есть все биты адреса подсети, соответствующие нулям в маске, устанавливаются в «1»). Например, если адрес сети равен 192.168.0.0, маска подсети 255.255.255.0, то широковещательный адрес будет 192.168.0.255

Мне нужна следующая система,  N клиентов в локальной сети, слушают PORT и передают данные по UDP.  Клиенты ничего не знают друг о друге но находятся в пределах одной локальной сети, дабы узнать инфу о других клиент отсылает опрос-пакет с широковещательным адресом, соответственно остальные должны получить пакет и отправить обратно некоторые данные о себе. Как провернуть подобное?

SkyDevПостоялецwww5 мая 201713:37#3
Нашел на стеке.
Blindly changing the last byte will not always work. It depends on the actual subnet mask being used on the network. The correct way to generate a broadcast address is to take the local computer's IP, `AND' it with the subnet mask, then 'OR' it with the inverse of the subnet mask. Alternatively, just use the global broadcast address 255.255.255.255, but not all firewalls/routers will allow that to pass through.

Но это не основной вопрос. Есть ли у кого-то пример использования сокетов в kNet?

ZabПостоялецwww5 мая 201713:37#4
255.255.255.255 (адрес, а не маска) используется в DHCP. Не стоить его использовать как широковещательный адрес.

Как броадкасты выразить в kNet - понятия не имею, не знаю даже можно ли это вообще. На чистых сокетах - легко. Но без гарантий доставки, естественно.

SkyDevПостоялецwww5 мая 201713:49#5
Zab
Подскажи как через сокеты. [ Подойдут и BSD, и Asio ( предпочтительнее ) ]
SkyDevПостоялецwww5 мая 201714:09#6
На формумах говорят о двух операциях что бы достичь броадкаста:

1) Вычислить широковещательный адрес ( те программные методы которые я видел больше похожи на костыли и не подходят ).
2) Выставить сокету соответствующее состояние:

int enabled = 1;
setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &enabled, sizeof(enabled));

Zab
У тебя другой метод?

Правка: 5 мая 2017 14:09

9К720Участникwww5 мая 201714:16#7
SkyDev
> те программные методы которые я видел больше похожи на костыли и не подходят
Странно. Какие к черту, костыли.
take the local computer's IP, `AND' it with the subnet mask, then 'OR' it with the inverse of the subnet mask

Пример: адрес 192.168.0.1/24
192.168.0.1 and 255.255.255.0 = 192.168.0.0
192.168.0.0 or (not 255.255.255.0) = 192.168.0.0 or 0.0.0.255 = 192.168.0.255
Это и есть твой широковещательный адрес для данной сети.

SkyDev
> другой метод
Еще есть мультикаст. Например.

SkyDevПостоялецwww5 мая 201714:19#8
9К720
Я бы так и делал! но...
`AND' it with the subnet mask,
Как программно получить маску подсети? Платформы Win, macOS, iOS, Android.

Мультикаст?

Правка: 5 мая 2017 14:23

9К720Участникwww5 мая 201714:35#9
SkyDev
> Как программно получить маску подсети? Платформы Win, macOS, iOS, Android.
http://lmgtfy.com/?q=windows+get+subnet+mask+programmatically
http://lmgtfy.com/?q=macos+get+subnet+mask+programmatically
http://lmgtfy.com/?q=ios+get+subnet+mask+programmatically
http://lmgtfy.com/?q=android+get+subnet+mask+programmatically
+ Показать

SkyDev
> Мультикаст?
http://lmgtfy.com/?q=network+multicast

SkyDevПостоялецwww5 мая 201714:42#10
9К720
+ Показать

Спасибо!
ZabПостоялецwww5 мая 201715:37#11
9К720
> Еще есть мультикаст. Например.
Поправь только, что есть стандарт на мультикаст, но он так и не реализован толком, и вероятно уже никогда не будет реализован. Возможно, в локальной сети ваш админ найдет как установить софт для мультикаста, если найдет таковой, а для глобальной сети подобный софт не существует. В районе 2000го года на основе мультикаста собирались налаживать телевизионное и радиовещание через интернет, но не вышло.

Правка: 5 мая 2017 15:37

SkyDevПостоялецwww5 мая 201715:43#12
Zab
Если не стандартизированная технология, значит не подходит. Система должна работать предварительно не имея никакой информации о локальной сети.
Спасибо за инфу!
ZabПостоялецwww5 мая 201715:47#13
Надо еще добавить, не в любой локальной сети броадкасты ходят. Тут как настроишь... По умолчанию свичи эти посылки пропускают, роутеры - нет. Бывает в одной комнате половина компов в одном сегменте сети, другая - в другом, независимо подключенных к доменному северу, между ними широковещательные сообщения ходить не будут.
SkyDevПостоялецwww5 мая 201715:50#14
Это уже проблема пользователя. Все аспекты предусмотреть и решить невозможно.

Страницы: 1 2 3 Следующая

/ Форум / Программирование игр / Сеть

2001—2017 © GameDev.ru — Разработка игр