Страница 2 из 2

Re: связь по ethernet

Добавлено: 27.09.2010 23:17:33
alexs
Yurakl писал(а):и что же эти файлы сделают???

А откомпилировать и запустить?

Re: связь по ethernet

Добавлено: 29.09.2010 08:53:56
Yurakl
.wOvAN
используется то тсп, я уже писал об этом, но если сокет разрывается, то никакой гарантированной доставки не будет

Добавлено спустя 1 минуту 1 секунду:
alexs писал(а):
Yurakl писал(а):и что же эти файлы сделают???

А откомпилировать и запустить?


я что-то не могу найти данные файлы:(

Re: связь по ethernet

Добавлено: 29.09.2010 22:36:07
alexs

Re: связь по ethernet

Добавлено: 02.10.2010 12:08:33
SAK
Изначально ошибочный подход: проверить наличие связи и затем отправить данные без подтверждения получения, а если связь есть, но переданные данные потерялись? Надо сразу передавать данные и получать подтверждение их получения иначе система получается нестабильной.

Re: связь по ethernet

Добавлено: 04.10.2010 13:06:40
Yurakl
SAK
стабильность обеспечивает тсп протокол.
Однако если сокет вырублен, то программа у меня сама сохраняет не отправленные пакеты, а при возобновлении связи их передает получателю

Re: связь по ethernet

Добавлено: 04.10.2010 17:08:39
minoshi
Yurakl писал(а):Однако в некоторых моментах она почему-то не срабатывает. И при отсутствии сети данные все равно передаются.



Доброго времени суток, уважаемый Юракл!

Как я понял, основные Ваша проблема - это периодическое нерегулярное пропадание связи между двумя компьютерами.
Основные решения Вам уже подсказали, однако повторюсь (не знаю какой у Вас уровень программирования):

1.Я не знаю как у Вас устроена сеть и как далеко располагаются Ваши компьютеры друг от друга. Но если пропадание связи не регулярное, то первое, что я заподозрил бы - это проблемы самой сети - начиная от банального не плотно вставленного разъема кабеля в гнездо сети (который периодически задевает уборщица при мытье пола) и кончая наличием какого-то общедоступного сервера, на котором валяются тонны музыки, фильмов и игрушек (вон, на прошлом неделе, кто-то у меня на работе выложил на сетевой диск новый фильм, два десятка лоботрясов стали его смотреть, сеть, сами понимаете, просела ниже плинтуса, пока не пришел админ и не навел порядок).

А может в это время у Вас где-то на серваке происходит синхронизация каких-то данных, слив/прием информации большого объема? В этот момент времени пакеты могут банально не дойти.

2.Проверьте наличие и настройки антивирусов. Опять пример, на работе пользуемся самописным мессенгером, работающим на сокетах так вот каспер пропускает его без проблем, а НОД32 зарубил (дополнительно пришлось ему прописывать зоны, и прочую чепуху).

3.Проверьте номер порта, который открывает сокет (я по первости по-дурости прописывал порты 32, 123 и т.п. и потом жутко удивлялся почему у меня ничего не работает :) ). Может его где-то как-то рубит антивирь.

3.Проблемы в коде программы: первое - сдерните последнюю версию лазаря и перекомпилируйте программу.

4.Не поможет, впишите в прогу (если она сама не рапортует об ошибках(exceptions), где только можно вывод сообщений текущего состояния на консоль и анализируйте вывод.
Опять таки, как Вам уже советовали, проверяйте первоначальную доступность компа тем же пингом.
Нет пинга, не смысла слать пакеты. Есть пинг, но нужный порт закрыт - нет смысла слать пакет.
Ошибка думается найдется.

5.Ничего не получилось, ну выложите код сюда, а также описание операционных систем на этих компьютерах, вместе покумекаем, авось миром поборем заразу.

На первое время я бы поступил так.

Re: связь по ethernet

Добавлено: 05.10.2010 12:39:26
Yurakl
minoshi
видимо вы не до конца поняли суть проблемы. объясню еще раз и постараюсь подробнее.
Имеется компьютер на котором работает специализированное ПО, это ПО подключается по сети к другому компьютеру на котором запущена программа,написанная на лазарусе в линуксе. Эта программа должна определять наличие связи с ПО(может сеть отрублена, а может и само ПО вырублено, НЕ ВАЖНО!), и пинги здесь не помогут. Если этой связи по тсп нет, то просто она данные сохраняет у себя, чтобы при ее появлении выдать их в сеть.
Вообще вся сеть работает нормально. здесь видимо проблема в самой проге. а как проверять наличие связи я уже писал, при помощи команды send, либо в чем-то другом. В чем понять не могу.
данные которые отправляет программа считываются из ком порта устройства. И вот если подключено одно устройство, то все работает отлично, а вот если подключают другое похожее и сеть пропадает, то прога этого не видит...

Re: связь по ethernet

Добавлено: 06.10.2010 14:04:00
SAK
А чем отправляются данные? Тем же send? Тогда зачем дополнительно проверять отправкой пустого пакета? А если пустой пакет дошёл, а следующий за ним пакет с данными потерялся? Почему не сразу слать пакет с данными и проверять результат доставки, если не дошёл значит сохраняем данные до следующего раза. Может проблема только с пустыми пакетами?

Re: связь по ethernet

Добавлено: 06.10.2010 14:30:23
Yurakl
пустой пакет проверяет наличие связи для того, что сразу данные невозможно отправить, их необходимо обработать перед отправкой. а если пустой пакет не доходит, т.е. связи нет, то он просто записывается в память, а обрабатывается позже
пробовал отправлять не пустые пакеты, все тоже самое. да и разницы никакой нет...

Re: связь по ethernet

Добавлено: 06.10.2010 14:51:14
.wOvAN
Yurakl Я так понял вам нужно подобие SMTP сервера? Так скопируйте логику SMTP ставьте все приходящие данные в очередь (т.е. сохраняте в файлы н-р) затем сервер с определенным интервалом будет эти данные пытаться передать адресату и если успешно то удалять из очереди :|

Re: связь по ethernet

Добавлено: 06.10.2010 15:16:30
Yurakl
нет, не SMTP, вообще делаю что-то типа буфера. который исключает потерю данных в случае отсутствия связи с компом. Т.е. если нет связи с ПО, то данные записываются в буфер,а если она есть то они сначала выдаются.а потом напрямую передаются с небольшой обработкой.
Все реализовано и работает в целом. но в некоторых моментах при отсутствии связи программа не видит этого

Re: связь по ethernet

Добавлено: 23.10.2010 02:29:15
and
Yurakl писал(а):пустой пакет проверяет наличие связи для того, что сразу данные невозможно отправить, их необходимо обработать перед отправкой. а если пустой пакет не доходит, т.е. связи нет, то он просто записывается в память, а обрабатывается позже
Ну как, за истекшие две недели поняли, что Вам две страницы пытаются объяснить?
"если пустой пакет не доходит" - связи нет на момент отправки тестового пакета. Но не гарантирует, что связь не появится в следующий момент.
Если пустой пакет отправился - связь есть на момент отправки тестового пакета. Но не гарантирует, что связь не прервётся в следующий момент.
Вам ведь SAK описАл самый правильный и очевидный подход: посылайте сразу пакет с данными. Если "связи нет" - он не дойдёт, и Send не вернёт размер Ваших данных, и тогда сохраняйте на диск.

Re: связь по ethernet

Добавлено: 23.10.2010 07:13:15
Vadim
Yurakl
Сделайте функцию ответа на принятый пакет. Каждый пакет данных имеет определённый объём. В ответе второй комп посылает цифру принятых байт. Если совпадает, значит пакет прошёл, если нет - инициируется повторная отправка.

Re: связь по ethernet

Добавлено: 26.10.2010 14:11:06
Yurakl
and писал(а):
Yurakl писал(а):пустой пакет проверяет наличие связи для того, что сразу данные невозможно отправить, их необходимо обработать перед отправкой. а если пустой пакет не доходит, т.е. связи нет, то он просто записывается в память, а обрабатывается позже
Ну как, за истекшие две недели поняли, что Вам две страницы пытаются объяснить?
"если пустой пакет не доходит" - связи нет на момент отправки тестового пакета. Но не гарантирует, что связь не появится в следующий момент.
Если пустой пакет отправился - связь есть на момент отправки тестового пакета. Но не гарантирует, что связь не прервётся в следующий момент.
Вам ведь SAK описАл самый правильный и очевидный подход: посылайте сразу пакет с данными. Если "связи нет" - он не дойдёт, и Send не вернёт размер Ваших данных, и тогда сохраняйте на диск.


Если посылать сразу пакет с данными, то тогда возникнет такая ситуация, что пока не было связи и данные сохранялись в памяти,а когда она появилась, то им сначала пришел пакет,который обрабатывается в настоящее время,а только потом пакеты из памяти.
тем более все пакеты программой еще обрабатываются в зависимости от того передаются они сразу или записываются в память

Re: связь по ethernet

Добавлено: 26.10.2010 20:23:56
and
Yurakl писал(а):Если посылать сразу пакет с данными, то тогда возникнет такая ситуация, что пока не было связи и данные сохранялись в памяти,а когда она появилась, то им сначала пришел пакет,который обрабатывается в настоящее время,а только потом пакеты из памяти.
Т.е. нарушается очередь, я правильно Вас понял? Так отправляйте всегда самый старый пакет!