Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.19;
Скачать: CL | DM;

Вниз

TIdTcpServer,TIdTcpClient   Найти похожие ветки 

 
Hereticsoul ©   (2005-11-08 15:31) [0]

Привет мастерам!
Подскажите пожалуйста в моей проблемке.

Вообщем написал чат для хранения сообщений использую MySQL(ну удобно...можно посылать сообщения в оффлайне и проч прелести...типа логов) но мне надо было знать когда кто нибудь отправит сообщение и заставить клиента обновиться.Сначала я взял Tserversocket и Tclientsocket они вроде работали нормально, но сервер со временем вылетал с ошибкой((( и сейчас я хочу это заменить чем нибудь другим...я схватился за сабж но так и не понял как это все заставить работать т.к. у клиента нет такой вещи как например события "Если кто нить че нить прислал"...скачав пример с сайта Indy я был крайне удивлен (кому интересно может посмотреть
http://www.projectindy.org/DemoDownloads/Indy9Demos_26Oct04.zip        
1,3 Mb) вообщем такой подход мне не особо подходит....
мне остается надеятся что может кто нить поможет??


 
Digitman ©   (2005-11-08 15:39) [1]


> взял Tserversocket и Tclientsocket они вроде работали нормально,
>  но сервер со временем вылетал с ошибкой


с учетом ошибок в ТВОЕМ алгоритме работы с Tserversocket - ничего удивительного .


> сейчас я хочу это заменить чем нибудь другим


... а потом и третьим, и четвертым, и столохматым) ..

толку-то от замены, если ты споткнувшись о первую же непонятную тебе ошибку и даже не сделав попытки разобраться в ней начинаешь пенять на компонент ?


 
Slym ©   (2005-11-08 15:44) [2]

Hereticsoul ©   (08.11.05 15:31)
события "Если кто нить че нить прислал"...

У клиента есть такое событие
Hereticsoul ©   (08.11.05 15:31)
но сервер со временем вылетал с ошибкой

У ошибки есть сообщение?
Hereticsoul ©   (08.11.05 15:31)
вообщем такой подход мне не особо подходит

Какой такой, и чем именно?


 
Hereticsoul ©   (2005-11-08 16:19) [3]


> с учетом ошибок в ТВОЕМ алгоритме работы с Tserversocket
> - ничего удивительного


procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
Begin

For i := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
Begin
 ServerSocket1.Socket.Connections[i].SendText("U"+#10#13);
End;

End;


Это весь сервер.Большего мне от него и не надо.


> У клиента есть такое событие


OnConnected
OnDisconnected
OnStatus
OnWork
OnWorkBegin
OnWorkEnd

Где?
Либо я не понял твоего сарказма.....


> Какой такой, и чем именно?


Скачал?Посмотрел?Увидел? Вообщем в клиенте в демо чата от инди на форме висит таймер и OnTimer клиент начинает пытаться читать....вообщем смотри сам

procedure TForm1.Timer1Timer(Sender: TObject);
var
 Com,
 Msg : String;
begin
 if not IdTcpClient1.Connected then
   exit;

 Msg := IdTCPClient1.ReadLn("", 5); //читаем (таймаут 5м/с)

 if Msg <> "" then
   if Msg[1] <> "@" then
     begin
     { Not a system command }
       memLines.Lines.Add(Msg);
     end
   else
     begin
     { System command }
       Com := UpperCase(Trim(Copy(Msg, 2, Pos(":", Msg) -2)));
       Msg := UpperCase(Trim(Copy(Msg, Pos(":", Msg) +1, Length(Msg))));
       if Com = "CLIENTS" then
         lbClients.Items.CommaText := Msg;
     end;

end;


 
Digitman ©   (2005-11-08 16:29) [4]


> Это весь сервер


ну так а что ж ты хотел ?

примитивный сервер - примитивные и результаты ... ни обработки ошибок, ни анализа результата вызова send-метода ...


 
Hereticsoul ©   (2005-11-08 16:46) [5]

Ну что ж я взываю к помощи...научи пожалуйста...

И все же на каких принципах работать с сабжем???


 
Digitman ©   (2005-11-08 16:58) [6]


> на каких принципах работать с сабжем?


как минимум на 3-х

1. Обязательная обработка обытия OnClientError

2. Обязательный анализ результатов, возвращаемых Send/Receive-функциями

3. Задействование обработчика события OnClientWrite (зависит от результатов вызовов Send-методов)


 
Eraser ©   (2005-11-08 22:16) [7]


> Hereticsoul ©   (08.11.05 16:19) [3]

Пример работы с Indy, который ты привёт скорее показывает как НЕ надо работать с этими компонентами.

Неколько примеров есть тут http://www.atozed.com/indy/Demos/

PS Устанавливай Indy 10.


 
Hereticsoul ©   (2005-11-09 17:24) [8]

Спасибо господа огромное...буду делать выводы)))
А пример на полном серьезе оффициальный)))) сам удивлялся и не мог понять )



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

Текущий архив: 2006.02.19;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.043 c
15-1138189886
cyborg
2006-01-25 14:51
2006.02.19
Случай произошёл


2-1138750519
atmospheric
2006-02-01 02:35
2006.02.19
наследование класса


4-1133766431
alex_1234
2005-12-05 10:07
2006.02.19
"Обрыв" модема ???


6-1131291763
Volf_555
2005-11-06 18:42
2006.02.19
Как программно щёлкнуть на ссылку в Internet Explorer?


15-1138776748
Ega23
2006-02-01 09:52
2006.02.19
С Днём рождения! 1 февраля