связь по ethernet

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

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

связь по ethernet

Сообщение Yurakl » 24.09.2010 08:00:47

Добрый день!
У меня такой вопрос. У меня с одного компьютера программа, написанная в лазарусе на линуксе, передает данные на другой компьютер по эзернте. В случае отсутствия связи с компьютером данные должны сохраняться.
На данный момент наличие связи определяется с помощью команды send, которая возвращает количество переданных символов. Однако в некоторых моментах она почему-то не срабатывает. И при отсутствии сети данные все равно передаются. Как еще можно определить есть ли связь с другим компьютером по эзеренету?
Yurakl
новенький
 
Сообщения: 62
Зарегистрирован: 20.01.2010 08:59:53

Re: связь по ethernet

Сообщение Timid » 24.09.2010 08:32:17

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

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

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

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

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

2. Попросить целевой компьютер рассылать извещения о своей работе по UDP. Поищите примеры по "Чат по UDP".
Timid
постоялец
 
Сообщения: 290
Зарегистрирован: 21.11.2007 21:33:15

Re: связь по ethernet

Сообщение Yurakl » 24.09.2010 08:42:33

Я отправляю 0 байт в команде send, для проверки связи
Код: Выделить всё
i:=send(s,buf[0],0,MSG_NOSIGNAL);

на целевом компьютере ничего не получится сделать, так как там специальный софт принимает данные просто от заданного айпишника.
программа работает автономно. она определяет есть ли связь по эзеренту, если есть то пересылает данные, если ее нет, то сохраняет их у себя в памяти,а при восстановлении выдает их в сеть.
Yurakl
новенький
 
Сообщения: 62
Зарегистрирован: 20.01.2010 08:59:53

Re: связь по ethernet

Сообщение Timid » 24.09.2010 09:50:29

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

Может Вам стоит попробовать асинхронные сокеты. Там есть событие подтверждения установки соединения. Правда их реализация в Linux "хромает слегка".
Timid
постоялец
 
Сообщения: 290
Зарегистрирован: 21.11.2007 21:33:15

Re: связь по ethernet

Сообщение Yurakl » 24.09.2010 09:56:48

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

Re: связь по ethernet

Сообщение Vadim » 24.09.2010 11:09:21

Yurakl
У Вас ошибка в алгоритме проверки. ;)
Вам надо проверять не доступность ethernet, а доступность того компьютера. :) Ping это позволяет, так как получает ответ от конкретного того компьютера, а не от некоего мифического существа под названием "ethernet". :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: связь по ethernet

Сообщение Yurakl » 24.09.2010 11:19:45

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

Re: связь по ethernet

Сообщение Vadim » 24.09.2010 12:12:35

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

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

Re: связь по ethernet

Сообщение Yurakl » 24.09.2010 12:26:07

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

Re: связь по ethernet

Сообщение ViTality » 24.09.2010 13:35:05

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

Re: связь по ethernet

Сообщение evd » 24.09.2010 14:15:03

А программа на другом компьютере тоже самописная?
Если да, то почему бы той программе не возвращать результат операции?
Т.е. псевдокод клиента выглядит так:
Код: Выделить всё
Send(..); //отправляем данные
s:=ReadString(); //считываем результат операции
if SameText(s,'OK') then
//Данные успешно передались и программа-сервер данные обработала
else
//Данные не передались


В этом случае будет гарантия не только что данные передались, но и то что данные программа-сервер обработала (например сохранила в базе)
Аватара пользователя
evd
новенький
 
Сообщения: 21
Зарегистрирован: 13.09.2009 09:42:28
Откуда: Вологда

Re: связь по ethernet

Сообщение Yurakl » 24.09.2010 14:27:02

программа самописная, но ней мной. Да и в принципе любой тсп-клиент должен работать с ней.
Мне необходимо в моей программе только что-то поправить, и никакой другой софт переписывать не надо.
Yurakl
новенький
 
Сообщения: 62
Зарегистрирован: 20.01.2010 08:59:53

Re: связь по ethernet

Сообщение alexs » 24.09.2010 20:21:31

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

dsockcli.pp
dsocksvr.pp

если не страшно - о компилируем их
запускам сервер
потом клиента и удивляемся как всё просто. :D
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: связь по ethernet

Сообщение Yurakl » 27.09.2010 09:14:07

alexs
и что же эти файлы сделают???
а как-нибудь в программе в лазараусе можно что-то добавить или изменить???
Yurakl
новенький
 
Сообщения: 62
Зарегистрирован: 20.01.2010 08:59:53

Re: связь по ethernet

Сообщение .wOvAN » 27.09.2010 16:07:51

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

След.

Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 46

Рейтинг@Mail.ru