Дано: механизм передачи данных между 2 компами (не TCP/IP) под Windows. Похож на named pipes, но имеет ограничение на рамер пакета (4Kb). Т.е.
WriteFile (xxx, 4096, xxx) сработает, а WriteFile(xxx, 4097, xxx) вернет INVALID_PARAMETER. Есть поддержка асинхронного ввода-вывода (через overlapped io). Пакеты не теряются (100% гарантия доставки, при условии, что оба процесса живы).
Необходимо: Реализовать свой транспортный протокол. Сделать поддержку пакетов произвольной длины, порты (чтобы разные приложения могли посылать данные через этот механизм без конфликтов).
Понятно, что можно написать руками. Но возможно есть стандартные механизмы? Ну там boost.asio какой-нибудь? Или что-то другое.
Посоветуйте плиз.
LD>Необходимо: Реализовать свой транспортный протокол. Сделать поддержку пакетов произвольной длины, порты (чтобы разные приложения могли посылать данные через этот механизм без конфликтов).
Самым универсальным вариантом будет реализовать IP over "свой механизм передачи данных". Ведь, по сути, этот "механизм" есть сетевая карта с MTU=4096.
Здравствуйте, SkyDance, Вы писали:
LD>>Необходимо: Реализовать свой транспортный протокол. Сделать поддержку пакетов произвольной длины, порты (чтобы разные приложения могли посылать данные через этот механизм без конфликтов).
SD>Самым универсальным вариантом будет реализовать IP over "свой механизм передачи данных". Ведь, по сути, этот "механизм" есть сетевая карта с MTU=4096.
Да, примерно это я и хочу. Возможно вы подскажите мне готовые реализации? Или может какие-нибудь либы?
Здравствуйте, SkyDance, Вы писали:
LD>>Необходимо: Реализовать свой транспортный протокол. Сделать поддержку пакетов произвольной длины, порты (чтобы разные приложения могли посылать данные через этот механизм без конфликтов).
SD>Самым универсальным вариантом будет реализовать IP over "свой механизм передачи данных". Ведь, по сути, этот "механизм" есть сетевая карта с MTU=4096.
Это не решит задачу. В IP нет метода передачи пакетов произвольной длинны. Ограничение UDP — 64K минус копейки. А SCTP в венде, можно сказать, что нет.
Pzz>Это не решит задачу. В IP нет метода передачи пакетов произвольной длинны. Ограничение UDP — 64K минус копейки. А SCTP в венде, можно сказать, что нет.
В IP(v6) есть поддержка Jumbogram (RFC 2675), это вполне можно считать "произвольной длиной".
Далее, поскольку канальный уровень (тот самый авторский "свой механизм") 100% надёжен, можно применять "просто TCP". Вероятно, для задач автора будет работать хорошо, если нет — придется поиграть с размерами send/receive буферов, чтобы ничего не пропадало в недрах TCP реализации MS.
LD>Да, примерно это я и хочу. Возможно вы подскажите мне готовые реализации? Или может какие-нибудь либы?
ЕМНИП в MSDN есть пример loopback network adapter. К сожалению, я уже лет 5 под винду не писал и потому не помню, в каких разделах искать, но гугл по "loopback network adapter source code" уж что-нибудь да найдет.