![]() |
|
Модераторы: feodorv |
![]()
|
|
| Dubinsky |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
Вопрос вот в чём ...
есть прога (сервер) , её задача хранить на себе какие то данные , (много мелких 500 - 4000 байт файлов часто меняющихся) 1) в локальной сети присутствуют клиенты , жаждущие её получить и возможно заменить её на сервере . при обмене нужно следить за целостностью данных (тут мне интересно какой шанс искажения информации присутствуют у разных способов работы с сетью и какие эти способы бывают) 2) плюс есть некий компутер не в локалке который должен иметь полный доступ к серверу и возможность передавать некие данные и команды. какие способы для работы с локальной и глобальной сетями посоветуете в данных двух случаях посоветуете ? (хотелось бы ) передадут ли эти способы данные гарантированно без потерь или искажений ? вообще возможно ли передать данные гарантированно без потерь ? (и что для этого нужно делать ?) язык : Ц++ Бульдер программер : Я , неплохой но с сетью на Вы ! |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: нет Всего: 20 |
/*ИМХО
1) Про целостность... естественно нужно добавить уникальный код версии в каждый файл, дабы избежать тупого использования трафика aka закачка одного и того же. 2) Зачем компьютер ? Ты чего делаешь статичную систему ? Оперируй пользователями... выделяй аккаунты... наконец оставь один уникальный аккаунт админу. Самый сложный, но гарантированно велосипедно-генераторный(во какое слово) юзать напрямую интерфейс winsock для виндов и аналог для *nix. Зато можно хоть чему-то научиться. Самый простой... использовать протоколы высокого уровня... возможно будет меньше кода, меньше нервотрёпки, но здесь не жди высокой скорости(я думаю для современных приложений это довольно критично) """передадут ли эти способы данные гарантированно без потерь или искажений ?""" Если использовать протоколы высокого уровня, и соответсвенное АПИ, то все дело сводиться к SendMessage() ReciveMessage() естественно со стандартной ассинхронной поддержке. Если же использовать сокеты и функции send-recv(для виндов), то здесь надо следить и за блокированием и за целостностью. Исключением для некоторых недостатков являются Ассинхронные сокеты, применение которых тоже предьявляет ряд требований( не использование консоли, как главного окна приложения) Совсем же антицелостным( ЗЫ для твоей задачи я бы юзал Ассинхронные сокеты... Хотя покопай в сторону TSocket( или как там В Билдере называется компонент-оболочка сокетов ?) """программер : Я , неплохой но с сетью на Вы !"""" Очень странная фраза Если я ошибься, то тогда зачем было постить общий вопрос ? ИМХО*/ |
|||
|
||||
| Mayk |
|
||||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: нет Всего: 134 |
Вообще-то обычно надежность зависит от протокола. TCP является более надежным, так как ОС отправителя отслеживает за тем, чтобы все сообщения были отправлены(данные НЕ будут удалены из буфера отправки сокета, пока удаленная система не пришлет подтверждение. Если после некоторого времени подтверждения нет, то данные пересылаются снова), а ОС получателя следит за тем, чтобы все сегменты сообщения пришли в правильном порядке и только один раз(порядок сегментов может быть нарушен маршрутизаторами). При использовании протокола UDP такой халявы не будет в помине. Приложение всё должно обрабатывать само. Отправитель может отослать три сегмента А,Б,В, а получатель может получить их (теоретически) как четыре сегмента В,В,В,А. Тогда приложение должно само заметить дублирование В,отсутствие Б и неправильный порядок. Разумеется, в локальной сети шанс искажения с использованием УДП минимален. Хотя может борландовцы и добавили надежности.. Не знаю, не могу посмотреть, ибо из борлы только freebcc стоит
Теперь насчет блокирования. В маздае сокет можно сделать неблокируемым с использованием функции ioctlsocket(в нормальных системах для этого используется fcntl, ну да ладно)
Всё. Теперь сокет переведен в неблокируемый режим. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||||
|
|||||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: нет Всего: 20 |
__Mayk
Спасибо. """Вообще-то обычно надежность зависит от протокола. TCP является более надежным, так как ОС отправителя отслеживает за тем, чтобы все сообщения были отправлены""" В той части, которую ты цитировал, я имел ввиду протоколы высокого уровня, но происхождением от TCP. Таковым является SOAP(+ родство с xml) к примеру. """Теперь насчет блокирования. В маздае сокет можно сделать неблокируемым с использованием функции ioctlsocket(в нормальных системах для этого используется fcntl, ну да ладно) """ Хм...тогда возникнет другая проблема - проблема целостности, я думаю здесь лучше оперировать таймаутами. |
|||
|
||||
| Mayk |
|
||||||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: нет Всего: 134 |
Не пойму от чего тут возникает проблема целостности? TCP чертовски надежён(ища(а вдруг?) опровержения набрал в гугле "ненадежность TCP" и "надежность TCP". В первой ссылке о надежности классная фраза: "Надёжность TCP позволяет всякому Остапу Бендеру из Восточной Африки рассылать по миру спам наивысшего качества."
Ух, ну не знаю. SOAP не использовал. Какой-то он растратный (Пример из вики): "The client needs to know which product corresponds with the ID 827635"
(много байт) вместо(например):
(5 байт) ИМХО это не так растратно для трафика... Хотя для каждой задачи свои инструменты, спорить не бу. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||||||
|
|||||||||
| bel_nikita |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 1 Всего: 47 |
Dubinsky
|
||||
|
|||||
| Mayk |
|
||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: нет Всего: 134 |
В TCP это исключено. Все дружно курим RFC793 и другие умные вещи:
Кстати, для UDP можно еще посоветовать TFTP протокол. Хотя он довольно медленный по сравнению с FTP. Это сообщение отредактировал(а) Mayk - 2.7.2005, 12:54 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||
|
|||||
| bel_nikita |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 1 Всего: 47 |
Mayk
|
||||||
|
|||||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: нет Всего: 20 |
"Какой-то он растратный"
Я тоже так считаю, поэтому его не использую. В данном контексте я имел ввиду сложность работы с АПИ чисто в функциональном плане... |
|||
|
||||
| Dubinsky |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
Уфф спасибо , глубоко копнули ...
Разгребусь за недельку с интерфейсом и полезу сеть делать ... наверняка появятся вопросы новые ... видимо удел мой ТЦП , ФТП ... а насчет игр и УДП если он такой ненадёжный то какого ... его используют ? это из - за широкополоспого вещания только то ?.. Разве нельзя по ТЦП всем передавать что либо Бродбандом , глупость какая то , чтобы всем компам пошла инфа её нужно сначала потерять по УДП ? ;) ну да ладно я бы лучше всё равно ничего лучше бы не придумал ... |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: нет Всего: 20 |
UDP - это не только широковещание(хотя для игр с 1000 игроков это довольно важно). Это прежде всего скорость. Но все лучшее требует жертв... на самом деле udp не контролирует соединение, потому что его просто нет
|
|||
|
||||
| Dubinsky |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
ну соединение гарантирующее скорость а не дошедшие данные сомнительно , неужели так плохо с УДП всё ? 50 на 50 что пропадёт пакет ... Да как вообще все эти сети пашут ...
Как бывший кабельщик вообще не верю что инет может пахать Добавлено @ 11:50 мдаа инет тормозит игроиндустрию ... |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: нет Всего: 20 |
Да не плохо все... потеряться что-то может только если его отрежут на файрволе. Дойдет мне кажется все, но вот программа об этом никогда не узнает, если не использовать методы трассировки.
|
|||
|
||||
| Dubinsky |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
вот всем кажется , а есть какая нибудь информация о том какой шанс у
пакета дойти искаженным ? от чего это зависит ? наверняка шанс ничтожный но ведь есть ? |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: нет Всего: 20 |
Берем кабель один конец-локалка другой-питание(220) И дружно втыкаем это все в одноранговую сеть во время работы программы. Вот и шанс вам |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |