www.flightgear.ru
http://flightgear.ru/forum/

Как установить порт отправки данных из fg
http://flightgear.ru/forum/viewtopic.php?f=12&t=735
Страница 1 из 1

Автор:  vlkhomenko73 [ 11 сен 2013, 08:56 ]
Заголовок сообщения:  Как установить порт отправки данных из fg

Добрый день!

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

Автор:  VaLeo [ 11 сен 2013, 09:39 ]
Заголовок сообщения:  Re: Как установить порт отправки данных из fg

fgfs --generic=socket,out,5,127.0.0.1,1234,udp,abc-protocol

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

Автор:  vlkhomenko73 [ 11 сен 2013, 10:26 ]
Заголовок сообщения:  Re: Как установить порт отправки данных из fg

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

Автор:  VaLeo [ 11 сен 2013, 13:45 ]
Заголовок сообщения:  Re: Как установить порт отправки данных из fg

Я не силен в сетевых технологиях, но разве нельзя слушать порт именно 1234?

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

Автор:  vlkhomenko73 [ 11 сен 2013, 14:46 ]
Заголовок сообщения:  Re: Как установить порт отправки данных из fg

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

Автор:  VaLeo [ 11 сен 2013, 15:04 ]
Заголовок сообщения:  Re: Как установить порт отправки данных из fg

А нельзя каждому приложению дать свой порт?

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

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

Автор:  DimkaS [ 11 сен 2013, 15:07 ]
Заголовок сообщения:  Re: Как установить порт отправки данных из fg

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

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

Автор:  vlkhomenko73 [ 11 сен 2013, 23:29 ]
Заголовок сообщения:  Re: Как установить порт отправки данных из fg

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

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/