Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

IdTCPClient&IdTCPServer VS ServerSocket&ClientSocket [D6, Win2k, WinXP]


MetalFan ©   (2004-07-27 10:16:00) 

что лучше использовать? что надежнее работает?


MetalFan   (2004-07-27 12:10:00) [1]

сорри за неверный подход к проблеме!
всем спасибо за помощь!


Digitman   (2004-07-27 12:02:00) [2]


> MetalFan ©   (27.07.04 11:52) [12]


в дан.ситуации одним из выходов и будет заключение ReadLn в блок try..except

Но ! ситуация-то прояснилась лишь ПОСЛЕ того, как ты привел КОНКРЕТНЫЙ код ! ... так стоило ли делать столько бесполезных постов ? да еще и бросать зерно сомнения в огород "надежности" компонентов ?


MetalFan   (2004-07-27 11:52:00) [3]

что-то я совсем запутался! а какой модет быть выход из этой ситуации?


Reindeer Moss Eater   (2004-07-27 11:34:00) [4]

FMess := AThread.Connection.ReadLn('', 200); <=здесь выдает ошибку

И это по твоему неправильно?
А как по твоему правильно должно быть?
Сервер погасили, а он как ни в чем ни бывало продолжает выполнять ReadLn и может быть даже получает полезные данные от клиентов?
Так что ли?


MetalFan   (2004-07-27 11:32:00) [5]

попробую описать подробнее, может кто поможет:
есть IdTCPServer у него обработчики событий:

TServer.OnDisconnect(AThread: TIdPeerThread);
begin
 if assigned(FClients) then
   DoRefreshClients;
end;
...
TServer.OnExecute(AThread: TIdPeerThread);
var
FMess: string;
begin
 FMess := AThread.Connection.ReadLn('', 200); <=здесь выдает ошибку
 if (trim(FMess) <> '')
 begin
   DoBroadCastMessage(FMess + ': ' +   AThread.Connection.Binding.PeerIP);    
 end;
end

при установке серверу Active:= false;
а указанном месте выдает вышеупомянутую ошибку и только потом попадает в OnDisconnect...


Reindeer Moss Eater   (2004-07-27 11:17:00) [6]

а что тогда с ошибкой делать? просто try..except?

Надо просто понять, что исключения - это не досадные особенности микросхем из которых сделаны компьютеры.
Это (в данном случае) - средство помогающее разработчику компонента сообщить простым и дешевым способом пользователю компонента о том, что что-то произошло. В данном случае - закрытие TCP соединения.


Digitman   (2004-07-27 11:14:00) [7]


> MetalFan ©   (27.07.04 10:50) [7]
> а что тогда с ошибкой делать?


искать ее причину и устранять


MetalFan   (2004-07-27 10:50:00) [8]

а что тогда с ошибкой делать? просто try..except?


Reindeer Moss Eater   (2004-07-27 10:37:00) [9]

Зачем?
Сервер волен остановиться когде ему захочется.


MetalFan   (2004-07-27 10:36:00) [10]

т.о. их надо сначала отключить?


Reindeer Moss Eater   (2004-07-27 10:34:00) [11]

не пойму из-за чего!

Неужели до сих пор не понял?

Эта ошибка из за того, что :

если при подсоединненых клиентах попытаться остановить сервер


MetalFan   (2004-07-27 10:32:00) [12]

хорошо) у меня с Indy такая проблема:
в примерах чата на основе Indy TCP Server/Client
если при подсоединненых клиентах попытаться остановить сервер, то вываливает ошибку: Project XXX raised exception class EIdSocketError with message 'Socket Error #10038 Socket operation on non-socket...' не пойму из-за чего!


Digitman   (2004-07-27 10:24:00) [13]


> что лучше использовать?


это решать только тебе, все зависит от конкретного применения


> что надежнее работает?


оба набора компонентов используют протокол TCP/IP, так что вопрос о "надежности" компонентов сводится к вопросу о надежности протокола TCP/IP, а таковой вообще не ставится, ибо этот протокол специально разработан для обеспечения гарантированной доставки сообщений


Reindeer Moss Eater   (2004-07-27 10:21:00) [14]

Какой ряд кресел в самолете летит надежнее?
Левый или правый?


Наверх

Титульная страница Поиск, карта сайта Написать письмо