![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]Какой ряд кресел в самолете летит надежнее?
Левый или правый?