связь по ethernet

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Yurakl
новенький
Сообщения: 62
Зарегистрирован: 20.01.2010 07:59:53

связь по ethernet

Сообщение Yurakl »

Добрый день!
У меня такой вопрос. У меня с одного компьютера программа, написанная в лазарусе на линуксе, передает данные на другой компьютер по эзернте. В случае отсутствия связи с компьютером данные должны сохраняться.
На данный момент наличие связи определяется с помощью команды send, которая возвращает количество переданных символов. Однако в некоторых моментах она почему-то не срабатывает. И при отсутствии сети данные все равно передаются. Как еще можно определить есть ли связь с другим компьютером по эзеренету?
Timid
постоялец
Сообщения: 290
Зарегистрирован: 21.11.2007 20:33:15

Re: связь по ethernet

Сообщение Timid »

И почему же мой телепатический шлем никак не вернут из ремонта? :)

Вы бы Юракл, хоть код приложили.

Какой-такой Send, как передает данные?..

В первом приближении, варианта решения проблемы два:

1. Делать ping (запускать стороннюю утилиту) и смотреть вывод. Или написать свой аналог пинга на Indy.

2. Попросить целевой компьютер рассылать извещения о своей работе по UDP. Поищите примеры по "Чат по UDP".
Yurakl
новенький
Сообщения: 62
Зарегистрирован: 20.01.2010 07:59:53

Re: связь по ethernet

Сообщение Yurakl »

Я отправляю 0 байт в команде send, для проверки связи

Код: Выделить всё

i:=send(s,buf[0],0,MSG_NOSIGNAL);

на целевом компьютере ничего не получится сделать, так как там специальный софт принимает данные просто от заданного айпишника.
программа работает автономно. она определяет есть ли связь по эзеренту, если есть то пересылает данные, если ее нет, то сохраняет их у себя в памяти,а при восстановлении выдает их в сеть.
Timid
постоялец
Сообщения: 290
Зарегистрирован: 21.11.2007 20:33:15

Re: связь по ethernet

Сообщение Timid »

Все равно не вполне понятна задача. Вам ведь недостаточно знать о доступности "того" компьютера, нужно быть уверенным, что "там" запущено нужное приложение и оно "слушает" сокет.
Насчет кода, который Вы привели. buf - это строка или массив?
Если строка, то может нужно писать buf[1] ? И как Вы предполагаете передать 0 байт?

Может Вам стоит попробовать асинхронные сокеты. Там есть событие подтверждения установки соединения. Правда их реализация в Linux "хромает слегка".
Yurakl
новенький
Сообщения: 62
Зарегистрирован: 20.01.2010 07:59:53

Re: связь по ethernet

Сообщение Yurakl »

Когда на другом компьютере запускается тсп-клиент, то соответственно создается сокет, по которому передаются данные. buf-это массив. в предложенной строке передается 0 символов, соответственно если ничего не передается, то i=-1, а если передаст, то i=0. при помощи этого я и проверял наличие связи. В целом работает, но иногда при отключении провода, программа не видит отсутствия сети
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: связь по ethernet

Сообщение Vadim »

Yurakl
У Вас ошибка в алгоритме проверки. ;)
Вам надо проверять не доступность ethernet, а доступность того компьютера. :) Ping это позволяет, так как получает ответ от конкретного того компьютера, а не от некоего мифического существа под названием "ethernet". :)
Yurakl
новенький
Сообщения: 62
Зарегистрирован: 20.01.2010 07:59:53

Re: связь по ethernet

Сообщение Yurakl »

Vadim
Подскажите, как тогда на лазарусе это проверить?
и на самом деле мне нужен не пинг с другим компьюетром,а именно есть ли связь.
Так как данные принимает специальное ПО(тсп-клиент), и если оно выключено, то связи нет и тогда данные не должны передаваться, а пинг будет
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: связь по ethernet

Сообщение Vadim »

Yurakl писал(а):Так как данные принимает специальное ПО(тсп-клиент), и если оно выключено, то связи нет

Значить нужен список признаков, по которым можно точно определить, что это ПО запущено.
Итак, каковы эти признаки?
Yurakl
новенький
Сообщения: 62
Зарегистрирован: 20.01.2010 07:59:53

Re: связь по ethernet

Сообщение Yurakl »

если ПО запущено, то тсп-сервер включен, настроенный на заданный айпишник и порт, а следовательно создается сокет между ПО и программой
ViTality
постоялец
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02
Контактная информация:

Re: связь по ethernet

Сообщение ViTality »

сначала пинг на доступность той машины
а потом проверяйте открыт ли порт который использует та спецпрога на той машине
Аватара пользователя
evd
новенький
Сообщения: 21
Зарегистрирован: 13.09.2009 09:42:28
Откуда: Вологда
Контактная информация:

Re: связь по ethernet

Сообщение evd »

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

Код: Выделить всё

Send(..); //отправляем данные
s:=ReadString(); //считываем результат операции
if SameText(s,'OK') then
//Данные успешно передались и программа-сервер данные обработала
else
//Данные не передались


В этом случае будет гарантия не только что данные передались, но и то что данные программа-сервер обработала (например сохранила в базе)
Yurakl
новенький
Сообщения: 62
Зарегистрирован: 20.01.2010 07:59:53

Re: связь по ethernet

Сообщение Yurakl »

программа самописная, но ней мной. Да и в принципе любой тсп-клиент должен работать с ней.
Мне необходимо в моей программе только что-то поправить, и никакой другой софт переписывать не надо.
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Re: связь по ethernet

Сообщение alexs »

Медитируем над модулем ssockets
Смотри в папке исходников - fpcsrc/packages/fcl-base/examples файлы

dsockcli.pp
dsocksvr.pp

если не страшно - о компилируем их
запускам сервер
потом клиента и удивляемся как всё просто. :D
Yurakl
новенький
Сообщения: 62
Зарегистрирован: 20.01.2010 07:59:53

Re: связь по ethernet

Сообщение Yurakl »

alexs
и что же эти файлы сделают???
а как-нибудь в программе в лазараусе можно что-то добавить или изменить???
.wOvAN
постоялец
Сообщения: 118
Зарегистрирован: 16.04.2010 06:36:12
Контактная информация:

Re: связь по ethernet

Сообщение .wOvAN »

А какой протокол используете? В TCP реализована поддержка гарантии доставки как таковая, если данные не доставлены возникают стандартные ошибки (с виде исключений или ещё как, зависит от реализации) все что остается это отлавливать эти ошибки.
Если же UDP то там надо реализовать свой механизм подтверждения доставки целостности данных.
Ответить