Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 338

/ вопрос открыт /

Здравствуйте, эксперты!
Проблемма следующая:
Есть TIdTCPClient на одной форме и TIdTCPServer на другой,
устанавливаю подключение, вес в порядке...
1й случай: Клиент шлет серверу сообщения, шлет раз, шлет два.... все гут, делаю дисконнект, коннект, все окей опять шлю и все принимается все нормуль...
2й случай: клиент послал серверу сообщение, сервер его обработал, все гут, потом сервер шлет клиенту сообщение, клиент его принимает... все казалось бы Ок, но если после того, как сервер отправляет сообщение клиенту, и потом я делаю клиенту дисконнект, то ничё больше не работает, делаю клиентом повторный коннект, он пишет типа подсоединился, но сообщения больше не обрабатываются на сервере и сам сервер не может ниче послать грит ошибка "Connection Closed Grasfully" и все... как это решить... Помогите плиииз...
P.S. использую Delphi 7 и Indy 10.1.5,
отправка сообщений:
Клиент: IdTCPClient1.Socket.WriteLn
Сервер:TIdContext(IdTCPServer1.Contexts.LockList.Items[0]).Connection.Socket.Wri teLn

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

PonosetcDM Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: PonosetcDM (статус: Посетитель)
Вопрос отправлен: 17 июня 2010, 12:16
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 18 июня 2010, 14:42; участников в обсуждении: 2.
Вадим К

Вадим К (статус: Академик), 17 июня 2010, 12:36 [#1]:

сообщение Connection Closed Grasfully значит, что одна с сторон закрыла подключение не согласовав с другой. Если в протоколе обмена сервер-клиент не предусмотрена команда "закрываем подключение" или не определена явно (то есть мы знаем размеры пакетов, мы знаем, когда отключаться), то это не ошибка а просто знак того, что нужно отключиться.

По коду - использовать AntiFreez для сервера - плохо.
также нужно наложить побольше try except
Галочка "подтверждения прочтения" - вселенское зло.
PonosetcDM

PonosetcDM (статус: Посетитель), 17 июня 2010, 15:57 [#2]:

От этого мне не легче, потому что ни послать ни принять, ни соединиться по-нормальному я больше с сервером не могу...
Вадим К

Вадим К (статус: Академик), 17 июня 2010, 17:09 [#3]:

вообще никак? так как сервер работает на уровне строк, то можно попробовать поотлаживать его telnet'ом.
Галочка "подтверждения прочтения" - вселенское зло.
PonosetcDM

PonosetcDM (статус: Посетитель), 18 июня 2010, 08:54 [#4]:

Воооо.... ваще чума....
я запустил программу(сервер)
подключился к ней по telnet из cmd,
сервак послал клиенту сообщение, все окей,
принято telnet'ом, обработано...
закрываю telnet,
открываю telnet,
делаю коннект "типа все окей", сервак шлет сообщение клиенту и.......
правильно "Connection Closed Grasfully"... ваще жуть...
PonosetcDM

PonosetcDM (статус: Посетитель), 18 июня 2010, 14:42 [#5]:

кароче нужно следить и синхронизировать работу в OnExecut сервера с VCL, при посылке

var list:TList;
begin
....
for i:=0 to list.Count-1 do
with TIdContext(list.Items[i]).Connection.Socket do
WriteLn('123');
finally
IdTCPServer1.Contexts.UnlockList;
end;
.....
вот так надо делать


Усе спс Тема закрыта

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 2 июня 2023, 17:41
Выполнено за 1.02 сек.
Рейтинг@Mail.ru