![]() |
|
Модераторы: 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) И дружно втыкаем это все в одноранговую сеть во время работы программы. Вот и шанс вам |
|||
|
||||
| Mayk |
|
||||||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: нет Всего: 134 |
bel_nikita
Вот цитата из RFC.
Откуда такая статистика? Я в Brood War как-то по UDP играл через диалап(в бруде конечно есть простое модемное соединение, но были некоторые причины, по которым оно было нежелательно). Юниты бегали правильно
Очень маленький, ибо дейтаграммы UDP имеют 16 битную контрольную сумму. Контрольная сумма пересчитывается при получении пакета и если две checksum не совпадают, то приложение останет в счастливом неведении относительно того что пришел битый пакет(приложение вообще не узнает, что пришёл пакет). Может конечно инфа исказится так, что и checksum'ы совпадут, но никто, даже TCP(у него тоже 16 битная контрольная сумма), от этого не застрохован(кстати, заголовок IP имеет отдельную checksum).
Если интересен шанс потери, то советую поискать где-нибудь в сети udp эхо сервер(порт 7), который вернёт все полученные им дейтаграммы. А далее расчет: надежность := 100% * колво-полученных-сообщений/колво-отправленных-сообщений. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||||||
|
|||||||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: нет Всего: 20 |
Mayk
Извиняюсь это я дал неверную информацию. Я имел ввиду, что программа без дополнительных телодвижений не узнает была ли доставлена дейтаграмма или нет. |
|||
|
||||
| Dubinsky |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
Ага это уже интереснее ...
к примеру в C++ Builder есть такие компоненты , в закладке Fastnet , ну там мыло послать , принять , FTP , а также другая закладка Клиент сокет , Сервер сокет . Стоит на их основе делать хоть что то мало мальски серьёзное (посыл приём информации несколькими пользователями с сервера ) или это для глупых , ленивых , а по уму ручками(через Winsock ??) надо ? |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: нет Всего: 134 |
В основе всех этих ServerSocketов ClientSocketов лежат стандартные сокеты(смотреть в Source\Internet\sockets.pas). Поэтому по большому счету - какая разница? Юзай что хочешь. Лишь бы работало Просто в случае с билдером не придется изобретать/искать велосипед по отправке сообщений. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| Dubinsky |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
так почему ими так редко пользуются ? (TClientSocket - TServerSocket)
дурной тон ? |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: нет Всего: 134 |
Возможно. В последнее время билдером вообще не пользуюсь. Он тормозной(vcl'овские хедеры весят 10 метров. И такое ощушение что они все подцепляются к каждому файлу проекта), не портируемый(CLX? Нет уж, лучше сразу QT, он мощнее и с шаблонами, и попортируемее и дизайнер в нем красивее и хелпа удобнее), непонятный(что за дурное требование о размещении объектов в куче? А может я люблю классы статически размещать, чтоб не заботится о вызове деструктора?) да еще и запускается только из под NTяшек. То ли дело WinSock'и - сделал либу в LNX, добавил инициализацию для виндов, усё. Проблем почти нет. Хотя если писать всё приложение с использованием VCL, то почему бы и не взять их сокеты? Хуже от этого уже не станет, ведь так? Это сообщение отредактировал(а) Mayk - 6.7.2005, 17:51 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| Dubinsky |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
да без ВЦЛ мне уж точно не обойтись в моём проекте , мильон всяких пимпочек , пумпочек , на АПИ если писать на первой сотне сойду с ума , значит уж и не грех использовать ВЦЛ до конца ...
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |