www.flightgear.ru

FlightGear - свободно распространяемый, кросс-платформенный авиасимулятор.
Текущее время: 30 сен 2020, 09:34

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
СообщениеДобавлено: 11 сен 2013, 08:56 
Не в сети

Зарегистрирован: 11 сен 2013, 08:36
Сообщения: 4
Добрый день!

Возникла проблема при организации вывода данных с FG на другой узел. Мне необходимо, чтобы FG выдавал UDP-пакеты с определенного порта, но как можно указать порт я не нашел. По сниферу видно, что FG выбирает порт по своему усмотрению, меняя его от запуска к запуску. На форуме по этому поводу тоже ничего не видно, похоже всех это устраивало, например.
viewtopic.php?f=12&t=699
viewtopic.php?f=10&t=279
У меня же приемник должен забирать пакеты не только с FG, но и еще из одного приложения, установленного на том же узле, поэтому знать адрес отправителя недостаточно, нужно также фиксировать порт.
Может кто сталкивался?
Таки заранее спасибо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 сен 2013, 09:39 
Не в сети

Зарегистрирован: 13 фев 2008, 15:20
Сообщения: 966
Откуда: Днепропетровск
fgfs --generic=socket,out,5,127.0.0.1,1234,udp,abc-protocol

1234 - номер порта

_________________
ПТН ПНХ ХЛО


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 сен 2013, 10:26 
Не в сети

Зарегистрирован: 11 сен 2013, 08:36
Сообщения: 4
Это номер порта ПОЛУЧАТЕЛЯ, т.е. то КУДА шлется пакет с fg. А мне надо установить порт ОТПРАВИТЕЛЯ, чтобы я на принимающей стороне по номеру порта отправителя понимал, что пакет пришел именно с fg.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 сен 2013, 13:45 
Не в сети

Зарегистрирован: 13 фев 2008, 15:20
Сообщения: 966
Откуда: Днепропетровск
Я не силен в сетевых технологиях, но разве нельзя слушать порт именно 1234?

Ну вроде того как для строки запуска что выше, можно поменять out на in и фг будет принимать данные из разных портов (например, фдм с другой машины, тракир с локальной, мультиплей и проч.) понимая откуда что пришло.

_________________
ПТН ПНХ ХЛО


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 сен 2013, 14:46 
Не в сети

Зарегистрирован: 11 сен 2013, 08:36
Сообщения: 4
Слушать-то порт 1234 можно. Но при приходе пакета не будет понятно с какого приложения он пришел. Если мы знаем, что на узле т.е. определенном IP "сидит" только fg, то особых проблем нет - если ко мне на узел-приемник с этого IP пришел пакет на 1234, то значит он - от fg. Другое совсем маловерятно. Но у меня приложение, которое "слушает" на порту 1234 как fg, так и эмулятор специального контроллера. А эмулятор может быть запущен на том же узле, что и fg, т.е., пакеты пойдут параллельно с того же IP. Я их планировал различать по номерам портов-отправителей. А замечательный fg шлет их каждый раз с нового порта. И никаких намеков на настройку фиксированного порта нет. Или я ее не нашел, или это гениальная интеллектуальная задумка автора, которая наконец-то нашла своего "ценителя".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 сен 2013, 15:04 
Не в сети

Зарегистрирован: 13 фев 2008, 15:20
Сообщения: 966
Откуда: Днепропетровск
А нельзя каждому приложению дать свой порт?

ФГ шлет на 1234, эмулятор контроллера на 4321.

Приложение слушает оба порта и знает кто отправитель.

_________________
ПТН ПНХ ХЛО


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 сен 2013, 15:07 
Не в сети
Аватара пользователя

Зарегистрирован: 20 сен 2008, 12:40
Сообщения: 402
Откуда: Россия, Питер
Насколько я понимаю, структура сокета не подразумевает задание номера исходящего порта, ОС выбирает его самостоятельно случайным образом, FG тут ни при чём. Единственным решением будет использовать по отдельному порту на каждое приложение, как сказал VaLeo.

Немножко про сокеты: http://ru.wikipedia.org/wiki/%D0%A1%D0% ... 0%BB%D0%B8

_________________
Landings are not optional || Фото с моих полётов: http://picasaweb.google.ru/dimka.rs/yhfcfG#
Изображение


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 сен 2013, 23:29 
Не в сети

Зарегистрирован: 11 сен 2013, 08:36
Сообщения: 4
В принципе, можно было бы дать и отдельные порты, если бы не одни нюанс - у меня программа работает под DOS. А там выбор библиотек для сети мягко говоря небогатый. Даже в самой лучшей из них открыть два сокета на чтение одновременно не получается. Поэтому открывается один сокет в режиме сервера, который принимает на заданный порт пакеты от любого IP и порта и по ним же идентифицирует отправителя. Что касается автоматического назначения клиентских портов, то это совершенно справедливо для TCP; для UDP это зависит от реализации. Скажем, в той реализации библиотеки под DOS, которую я использую (Wattcp), порт можно задать, без проблем это делается в C# в классе UDPClient.
Чтобы как-то срочно решить проблему мне пришлось сегодня поменять уже выстроенную и проверенную схему идентификации клиентов на "гибрид" - пустил с fg пакеты с придуманным заголовком-идентификатором, а на принимающей стороне, если принятый пакет не подходит ни под одну заданную пару адрес-порт, то проверяю начало пакета на предмет наличия заголовка. Заголовок есть - решаем, что пакет от fg, нет - отбрасываем как "левый". Работает, но выглядит уже не так красиво.
Спасибо за участие, если все-таки на на что-то наткнетесь по теме, отпишите, пожалуйста.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
POWERED_BY
Русская поддержка phpBB