Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];

Вниз

Проблема с TServerSocket   Найти похожие ветки 

 
BoxTer   (2004-07-15 06:13) [0]

Доброе время суток!
У меня возникла интересная ситуевина: есть программулина, рассылающая некую строку по таймеру каждую минуту, вот код:

 
for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do begin
      ServerSocket1.Socket.Connections[i].Lock;
      ServerSocket1.Socket.Connections[i].SendText(st);
      ServerSocket1.Socket.Connections[i].UnLock;
  end;

в некоторый момент времени на серваке вылазит мессага типа "Ошибка асинхронности сокетов 10060" и св-во ServerSocket1.Active становиться на False. Ессно, все коннекты обрываются. Не могу понять почему это происходит и как избавиться от проблемы?
з.ы. есть подозрение, что это происходит во время отключения очередного юзера - по-этому добавил lock,unlock. Но не помогает... Хееееелп :-(


 
Григорьев Антон ©   (2004-07-15 08:25) [1]

Для начала надо было бы найти в MSDN"е описание ошибки 10060:

A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

Так что подозрение ваше верное.

Lock, Unlock - это из другой оперы. Непонято, с чего это вы решили, что это поможет.

Надо просто поместить SendText внутрь try/except и самому обрабатывать это исключение.


 
BoxTer   (2004-07-15 13:12) [2]

дык я и обрабатываю, но в любом случае на эксепте свойство ServerSocket1.Active становиться на False и все коннекты обрубаются... Я его включаю на эксепте, юзерам приходится переподключаться...


 
Григорьев Антон ©   (2004-07-15 20:28) [3]

Сервер жалуется на ошибку на удалённой стороне. Я бы предположил, что сеть работает неустойчиво. Если это так, то тут ничего не сделаешь, придётся подключаться заново. Или переходить на UDP, который подключения не требует. Но тогда придётся вручную следить за порядком доставки пакетов, за тем, чтобы они не пропадали.


 
BoxTer   (2004-07-16 06:22) [4]

а могет ишшо какие-нить мысли есть у кого?


 
Digitman ©   (2004-07-16 08:16) [5]


> BoxTer   (16.07.04 06:22) [4]


у меня есть мысль ... правда, к сабжу она не имеет непоср. отношения ..

а мысль такая - зачем тебе lock/unlock-вызовы понадобились ?


 
BoxTer   (2004-07-16 09:19) [6]

2Digitman. Понял, ашипся. Вопрос в другом...


 
Digitman ©   (2004-07-16 09:34) [7]


> BoxTer


покажи как ты обрабатываешь события серверного компонента


 
Dickan   (2004-07-16 09:40) [8]

В Вашем примере пакеты передаются одним потоком, т.е.
отправленный пакет:= st+st+st+... и т.д.
Лоченье здесь непричём.
Со стороны клиента обязательно надо присылать серверу сообжение о получении пакета.


 
Digitman ©   (2004-07-16 09:43) [9]


> Dickan   (16.07.04 09:40) [8]


> Со стороны клиента обязательно надо присылать серверу сообжение
> о получении пакета


с какой это стати - "обязательно" ?
это определяется исключительно прикладным протоколом инф.обмена и к TCP/IP отношения не имеет


 
Dickan   (2004-07-16 09:48) [10]

ну не обязательно ;0)

Просто обязательность определяется праильностью работы программы.


 
Digitman ©   (2004-07-16 10:00) [11]


> Dickan   (16.07.04 09:48) [10]


> обязательность определяется праильностью работы программы


из того что программа у автора работает "неправильно" вовсе не следует, что для достижения "правильности" ее работы требуется обязательное прикладное квитирование доставляемых сообщений


 
BoxTer   (2004-07-16 12:03) [12]

2Digitman:
ни одного события на компоненте ServwerSocket1 не обрабатывается...
Просто вот таким кодом раз в минуту рассылается:

try
 try
  for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do begin
      ServerSocket1.Socket.Connections[i].SendText(st);
  end;
 except
   //messageDlg("Ошибка отправки на клиентов."+#13#10+"Всего пользователей: "+inttostr(ServerSocket1.Socket.ActiveConnections)+#13#10+sh,mtError,[mbok],0);
   ServerSocket1.Active:=True;
   exit;
 end;
finally
  MainForm.Caption:="Последняя удачная отправка: "+timetostr(now);
end;


Может что-то я не так делаю?


 
Digitman ©   (2004-07-16 12:15) [13]


> ни одного события на компоненте ServwerSocket1 не обрабатывается


это печально

события OnClientWrite, OnClientError существуют не для украшения

и обрати свой взор на то, что SendText() - это функция


 
BoxTer   (2004-07-16 13:28) [14]

2Digitman: а какой-нить код можешь представить... Я ServerSocket впервые юзаю...


 
Digitman ©   (2004-07-16 13:32) [15]


> какой-нить код можешь представить


не могу ... любой код зависит от конечной логики

а справка - она всегда под рукой


 
VID ©   (2004-07-16 17:47) [16]

to BoxTer: В-общем, тебе надо обработать OnClientError таким образом что бы там была строка
ErrorCode := 0 (Это что бы сообщения об ошибке не появлялись).
Разумеется эту строку надо писать уже после того как ты используешь значение переменной ErrorCode для анализа ошибки в этом же обработчике (хотя тебе это вряд ли понадобится).
Так же не грех отправку текста взять в скобки try except end;



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.038 c
1-1094798736
hgd
2004-09-10 10:45
2004.09.26
Как нарисовать линию на TBitmap


10-1042011765
McSimm
2003-01-08 10:42
2004.09.26
От человека, не имеющего возможности пользоваться интернетом


14-1094546302
nick-from
2004-09-07 12:38
2004.09.26
Какие есть приличные стрелялки-убивалки сейчас?


1-1094571065
Marina
2004-09-07 19:31
2004.09.26
Подключение к проекту файлов с расширением *.inc


4-1092506457
bit
2004-08-14 22:00
2004.09.26
Межпрограммный интерфейс





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский