![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите непонятливому!!!! Indy IdTCPClient -
tes © (2003-08-06 18:29:00)
Помню раньше были компоненты TServerSocket TClientSocket, у клиента была такая тема как - ClientSocketRead, в Indy такого нет. Если ставить на таймер IdTCPClient.ReadLn то прога быстро уходит в мир иной (полное вислово) :( Подскажите каким образом нужно плучать ответы от IdTCPServer в клиенте. Задолбался уже.
Maximka (2003-08-18 21:19:00) [1]
Читал я, читал.....
А можно было просто установить старые компоненты.
Сделать с этого модуля *.dpk и инсталл его...
unit RegSockComps;
interface
procedure Register;
implementation
uses
ScktComp, Classes, DesignIntf;
procedure Register;
begin
RegisterComponents("Internet", [TServerSocket, TClientSocket]);
end;
end.
Maximka (2003-08-18 21:19:00) [2]
Читал я, читал.....
А можно было просто установить старые компоненты.
Сделать с этого модуля *.dpk и инсталл его...
unit RegSockComps;
interface
procedure Register;
implementation
uses
ScktComp, Classes, DesignIntf;
procedure Register;
begin
RegisterComponents("Internet", [TServerSocket, TClientSocket]);
end;
end.
_test_ (2003-08-08 14:32:00) [3]
Удалено модератором
Примечание: Предупреждение тебе.
Reindeer Moss Eater (2003-08-08 14:15:00) [4]
Е-Моё имя
Ну да, согласен полностью.
Е-Моё имя (2003-08-08 14:11:00) [5]
Reindeer Moss Eater © (08.08.03 13:59)
не, не отдыхает
тренируется
по нику сразу видно ;)))))))))
бугагагагаагаа))))))
Reindeer Moss Eater (2003-08-08 13:59:00) [6]
Иногда природа отдыхает не только на детях гениев.
Иногда она просто так отдыхает.
_test_ (2003-08-08 13:55:00) [7]
Удалено модератором
_test_ (2003-08-08 13:49:00) [8]
Удалено модератором
Е-Моё имя (2003-08-08 13:28:00) [9]
Удалено модератором
test (2003-08-08 13:25:00) [10]
Удалено модератором
Е-Моё имя (2003-08-08 09:43:00) [11]
Reindeer Moss Eater © (07.08.03 15:50)
test
За весь разговор с Вами, я не получил ни одного конкретного отвела
Ты просто не умеешь понимать читаемое.
точна! )))
и еще немерянно разных вариантов. НЕРАБОТАЕТ!!!
Неработает говоришь?
Прямо так вот и сообщает "НЕ РАБОТАЮ, ХОТЬ ЗАСТРЕЛИСЬ"
Так ты застрелись, может заработает.
точна! )))
Reindeer Moss Eater (2003-08-08 08:40:00) [12]
Test
Теперь вспомни, что тебе говорили в самом начале твоего трудного пути:
>Reindeer Moss Eater © (07.08.03 14:02)
Соединившись с сервером, клиент должен читать. Прочитав, должен читать снова.
>Reindeer Moss Eater © (07.08.03 14:04)
Как только произойдет возврат из метода чтения, так значит "Вам пакет"
Reindeer Moss Eater (2003-08-08 08:28:00) [13]
test
При вызове процедуры ClientRead из OnConnect, чтение выполняется всего один раз. После выполнения, упорно отказывается принимать любые сообщения от сервера.
Вызвал процедуру ClientRead один раз, она отработала один раз.
Хотел чего-то другого?
nikkie (2003-08-07 19:43:00) [14]
>test
А теперь попробуй в этих примерах найти противоречие словам RME. Readln вызывается просто в цикле, никаких событий...
test (2003-08-07 19:23:00) [15]nikkie & Fredericco - От спасибо. Вот это дело, а то языками гоняют, а толку ... :( :)
Fredericco (2003-08-07 19:15:00) [16]
TMyThread=class(THread)
procedure Execute; override;
procedure ReadFromSocket;
( True)
TMyThread=class(THread)
procedure Execute; override;
procedure ReadFromSocket;
end;
Var
MyThread=TMyThread;
......
MyThread:=TMyThread.Cteate(True);
......
procedure IndyOnConnect;
begin
MyThread.Resume;
end;
procedure IndyOnDisConnect;
begin
MyThread.Suspend;
end;
procedure TMyThread.Execute; override;
begin
While not Terminated do ReadFromSocket;
end;
procedure TMyThread.ReadFromSocket;
var
s:string;
begin
s:=Indy.ReadLn;
OnIndyClientRead(s);
end;
procedure OnIndyClientRead(Text:string);
begin
//
end;
nikkie (2003-08-07 18:58:00) [17]>Так лучше?
нет, не лучше.
сервер:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
ACommand: String;
begin
ACommand := AThread.Connection.ReadLn;
if ACommand = "LIST" then begin
AThread.Connection.WriteLn("line1");
AThread.Connection.WriteLn("line2");
AThread.Connection.WriteLn("line3");
AThread.Connection.WriteLn("line4");
AThread.Connection.WriteLn("");
end else if ACommand = "QUIT" then begin
AThread.Connection.WriteLn("Bye");
AThread.Connection.WriteLn("");
AThread.Connection.Disconnect;
end else begin
AThread.Connection.WriteLn("Unrecognized command");
AThread.Connection.WriteLn("");
end;
end;
клиент:
procedure TForm1.ExecCmd(ACommand: String);
var
s: String;
begin
IdTCPClient1.Writeln(ACommand);
repeat
s := IdTCPClient1.Readln;
( s)
>Так лучше?
нет, не лучше.
сервер:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
ACommand: String;
begin
ACommand := AThread.Connection.ReadLn;
if ACommand = "LIST" then begin
AThread.Connection.WriteLn("line1");
AThread.Connection.WriteLn("line2");
AThread.Connection.WriteLn("line3");
AThread.Connection.WriteLn("line4");
AThread.Connection.WriteLn("");
end else if ACommand = "QUIT" then begin
AThread.Connection.WriteLn("Bye");
AThread.Connection.WriteLn("");
AThread.Connection.Disconnect;
end else begin
AThread.Connection.WriteLn("Unrecognized command");
AThread.Connection.WriteLn("");
end;
end;
клиент:
procedure TForm1.ExecCmd(ACommand: String);
var
s: String;
begin
IdTCPClient1.Writeln(ACommand);
repeat
s := IdTCPClient1.Readln;
Memo1.Lines.Add(s);
until s = "";
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
IdTCPClient1.Connect;
ExecCmd("XXX");
ExecCmd("LIST");
ExecCmd("QUIT");
IdTCPClient1.Disconnect;
end;
для имитации задержек в сервер можно добавить Sleep между вызовами Writeln. чтобы клиент при этих задержках реагировал на действия пользователя, на форму надо положить IdAntiFreeze.
test (2003-08-07 18:32:00) [18]
Procedure TForm1.SendVars (Msg: String);
Begin
List := tcp_rtsserver.Threads.LockList;
Try
For Count := 0 To List.Count - 1 Do
Try
TIdPeerThread(List.Items[Count]).Connection.WriteLn(Msg);
Except
TIdPeerThread(List.Items[Count]).Stop;
End;
Finally
tcp_rtsserver.Threads.UnlockList;
End;
End;
Procedure TForm1.ServerExecute;
Begin
With Server Do
Begin
Msg := Server.ReadLn;
If Msg = "xxx" Then
SendVars (Какоето сообщение);
Else
( "Reinder Moss Eater - El Stuppido")
Procedure TForm1.SendVars (Msg: String);
Begin
List := tcp_rtsserver.Threads.LockList;
Try
For Count := 0 To List.Count - 1 Do
Try
TIdPeerThread(List.Items[Count]).Connection.WriteLn(Msg);
Except
TIdPeerThread(List.Items[Count]).Stop;
End;
Finally
tcp_rtsserver.Threads.UnlockList;
End;
End;
Procedure TForm1.ServerExecute;
Begin
With Server Do
Begin
Msg := Server.ReadLn;
If Msg = "xxx" Then
SendVars (Какоето сообщение);
Else
ShowMessage ("Reinder Moss Eater - El Stuppido");
End;
End;
Так лучше? Все он посылает. Вот приемник не пашет :(
nikkie (2003-08-07 18:08:00) [19]
я ж говорю - проблема с сервером. твой (просто пример) ничего не посылает.
test (2003-08-07 17:50:00) [20]Пишу для особо одаренных (Reinder Moss Eater)!!!
Серверная часть: (Просто пример)
Procedure TForm1.ServerExecute;
Begin
Msg := Server.ReadLn;
If Msg = "xxx" Then
// Посылаем сообщение моему клиенту
Else
ShowMessage ("Reinder Moss Eater - El Stuppido");
End;
Учитываем, что сообщения посылаются не все сразу, а с разным промежутком времени и в разных колличествах.
Теперь клиент.
Procedure TForm1.ClientRead;
Begin
With Client Do
Begin
Msg := Client.ReadLn;
If Msg = "xxx" Then
// Чего то там
Else
( "Reinder Moss Eater - El Stuppido")
Пишу для особо одаренных (Reinder Moss Eater)!!!
Серверная часть: (Просто пример)
Procedure TForm1.ServerExecute;
Begin
Msg := Server.ReadLn;
If Msg = "xxx" Then
// Посылаем сообщение моему клиенту
Else
ShowMessage ("Reinder Moss Eater - El Stuppido");
End;
Учитываем, что сообщения посылаются не все сразу, а с разным промежутком времени и в разных колличествах.
Теперь клиент.
Procedure TForm1.ClientRead;
Begin
With Client Do
Begin
Msg := Client.ReadLn;
If Msg = "xxx" Then
// Чего то там
Else
ShowMessage ("Reinder Moss Eater - El Stuppido");
End;
End;
При вызове процедурыClientRead из OnConnect, чтение выполняется всего один раз. После выполнения, упорно отказывается принимать любые сообщения от сервера.