Форум: "Сети";
Текущий архив: 2003.10.13;
Скачать: [xml.tar.bz2];
ВнизПодскажите непонятливому!!!! Indy IdTCPClient - Найти похожие ветки
← →
Reindeer Moss Eater (2003-08-07 16:05) [40]Вот взял я твою процедурку и куда мне ее прикрутить?
Этот что ли вопрос? Прикрути куда больше нравится. Мне например больше нравится pas модулю прикручивать.
← →
Reindeer Moss Eater (2003-08-07 16:06) [41]Кстати! Скажи мне пожалуйста, куда ты эту процедуру в коде прикрутишь? На какое событие она будет вызываться?
После успешного коннекта.
← →
Tiny (2003-08-07 16:07) [42]2Reindeer Moss Eater
2. Куда прицепить показанный код.
Мож я чего пропустил - но ты так и не ответил КУДА
А без этого какой смысл от ответа на первый вопрос??
А за всем этим неявный вопрос "Как мне написать мою программу?"
А у кого ты видел другое??
← →
Tiny (2003-08-07 16:09) [43]Tiny (07.08.03 16:07)
:-) не успел спросить...:-)
← →
Reindeer Moss Eater (2003-08-07 16:10) [44]А у кого ты видел другое??
У многих видел.
А ты многих видел, кто бросает все, и отвечает на подобные "вопросы"?
← →
test (2003-08-07 16:13) [45]
> Мне например больше нравится pas модулю прикручивать
Ты или маленький, или под маленького косишь? Я тебя по человечески спрашиваю, как будет вызываться этот код? Если повесить его на событие - OnConnect, то после первого вызова не спасет даже AntyFreez. А как по другому прога поймет, что ей прислали пакеты, я просто не представляю. Объясни непонятливому!
← →
test (2003-08-07 16:16) [46]
> Только все, что ты спрашивал, это
> 1. Как читать данные (тебе сказали как)
> 2. Куда прицепить показанный код.
1. Я не спрашивал, как читать данные. Это твоих рук дело. Я задал конкретный вопрос, а то, что ты ответил по своему, так это уже извините.
2. И досихпор не пойму, как и откуда ты собрался вызывать этот код. Все нафиг повиснет и конец.
← →
$hade (2003-08-07 16:17) [47]Я вот кста не увидел за этим вопросом никакого неявного...
С год-полгода назад я несколько раз пытался узнать именно такой же вопрос - так в итоге не один и не ответил...хотя сообщений было много...в итоге пришлось разбираться самому...перелапачивать все исходники и тратить уйму времени на простой вопрос...
Человек столкнулся с совершенно незнакомой ему темой...и нфы нет в принципе...
Я так и не встречаю тут людей кто хотя бы более менее знает Indy...
А чем этот вопрос отличается от других?
← →
Reindeer Moss Eater (2003-08-07 16:18) [48]test
Слушай ты, большой, не пытающийся косить под умного.
Забудь ты про события!
Метод Connect - СИНХРОННЫЙ!!!!
Если он не вызывает исключения, то следущая строчка после него -место для вызова этой процедуры или ей подобной.
← →
$hade (2003-08-07 16:21) [49]2test (07.08.03 16:16)
Блин! И ты еще тоже! :-))) В отдельный поток все! :-)
Открой исходник idTelnetClient - там кода мало и все более-менее понятно...
← →
test (2003-08-07 16:22) [50]Reindeer Moss Eater
Начнем с того, что я пока ничего обидного в твою сторону не сказал. И если ты не в состоянии показать это дело на примере, а в состоянии только языком молотить, тогда ты действительно нифига не понимешь.
← →
Reindeer Moss Eater (2003-08-07 16:30) [51]Начни с того, что помести вызов процедуры в строчке своего кода, следующей за вызовом Connect.
Это конкретный ответ на вопрос, или до сих пор что-то непонятно?
← →
Erik Ivanov (2003-08-07 16:37) [52]Reindeer Moss Eater
Злобный ты какой!
test
Он имелл виду надо сделать отдельный TThread и в нем читать данные! Далее передавать их в буфер главного потока. Незабудь про критические секции хотя можно выделать память а указатель кидать через PostMessage(,,Integer(MyPoint)). После обязательно освободить. В Delphi есть demo как работать с тредами.
← →
Reindeer Moss Eater (2003-08-07 16:42) [53]Erik Ivanov
Я конечно злобный, но счас спросят про событие на которое надо вешать "все то, что ты сказал"
← →
test (2003-08-07 17:10) [54]Reindeer Moss Eater
Как ты мне надоел. Я тебе русским языком говорю - НЕРАБОТАЕТ эта херня. Пробовал я уже иWith TCPClient Do
и еще немерянно разных вариантов. НЕРАБОТАЕТ!!! один раз сообщение проходит и п....ц! Хоть застрелись. Возьми блин и попробуй у себя. Если проканает, дай мне кусок твоего кода или exeшник, если оно и у меня пройдет, то я принесу тебе свои извинения по поводу недопонимания с моей стороны. Если нет ...
← →
Reindeer Moss Eater (2003-08-07 17:22) [55]один раз сообщение проходит и п....ц! Хоть застрелись.
Ну и причем здесь клиент?
Если с сервера ничего кроме первого сообщения не приходит, то чего ты ожидаешь от программы клиента?
и еще немерянно разных вариантов. НЕРАБОТАЕТ!!!
Неработает говоришь?
Прямо так вот и сообщает "НЕ РАБОТАЮ, ХОТЬ ЗАСТРЕЛИСЬ"
Так ты застрелись, может заработает.
← →
Reindeer Moss Eater (2003-08-07 17:25) [56]Если проканает, дай мне кусок твоего кода или exeшник
Здесь никто до сих пор твоего кода еще не видел, который "не работает". Что мы вообще обсуждаем?
← →
nikkie (2003-08-07 17:27) [57]>test
>НЕРАБОТАЕТ!!!
вероятно у тебя просто проблема с сервером
← →
Reindeer Moss Eater (2003-08-07 17:30) [58]У него проблема с таймаутом Infinity и еще кое с чем.
← →
Digitman (2003-08-07 17:37) [59]
> test
умерь пыл, сударь !
ReadLn() читает строку, посланную сервером.
Строкой считается блок поступающих со стороны передатчика данных, ограниченных справа нуль-терминатором.
Пока нуль-терминатор не получен, ReadLn() будет блокировать исполнение дальнейших операторов в том коловом потоке, в котором ReadLn() вызван.
← →
test (2003-08-07 17:50) [60]Пишу для особо одаренных (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
, чтение выполняется всего один раз. После выполнения, упорно отказывается принимать любые сообщения от сервера.
← →
nikkie (2003-08-07 18:08) [61]я ж говорю - проблема с сервером. твой (просто пример) ничего не посылает.
← →
test (2003-08-07 18:32) [62]
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:58) [63]>Так лучше?
нет, не лучше.
сервер:
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.
← →
Fredericco (2003-08-07 19:15) [64]
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;
← →
test (2003-08-07 19:23) [65]nikkie & Fredericco - От спасибо. Вот это дело, а то языками гоняют, а толку ... :( :)
← →
nikkie (2003-08-07 19:43) [66]>test
А теперь попробуй в этих примерах найти противоречие словам RME. Readln вызывается просто в цикле, никаких событий...
← →
Reindeer Moss Eater (2003-08-08 08:28) [67]test
При вызове процедуры ClientRead из OnConnect, чтение выполняется всего один раз. После выполнения, упорно отказывается принимать любые сообщения от сервера.
Вызвал процедуру ClientRead один раз, она отработала один раз.
Хотел чего-то другого?
← →
Reindeer Moss Eater (2003-08-08 08:40) [68]Test
Теперь вспомни, что тебе говорили в самом начале твоего трудного пути:
>Reindeer Moss Eater © (07.08.03 14:02)
Соединившись с сервером, клиент должен читать. Прочитав, должен читать снова.
>Reindeer Moss Eater © (07.08.03 14:04)
Как только произойдет возврат из метода чтения, так значит "Вам пакет"
← →
Е-Моё имя (2003-08-08 09:43) [69]Reindeer Moss Eater © (07.08.03 15:50)
test
За весь разговор с Вами, я не получил ни одного конкретного отвела
Ты просто не умеешь понимать читаемое.
точна! )))
и еще немерянно разных вариантов. НЕРАБОТАЕТ!!!
Неработает говоришь?
Прямо так вот и сообщает "НЕ РАБОТАЮ, ХОТЬ ЗАСТРЕЛИСЬ"
Так ты застрелись, может заработает.
точна! )))
← →
test (2003-08-08 13:25) [70]Удалено модератором
← →
Е-Моё имя (2003-08-08 13:28) [71]Удалено модератором
← →
_test_ (2003-08-08 13:49) [72]Удалено модератором
← →
_test_ (2003-08-08 13:55) [73]Удалено модератором
← →
Reindeer Moss Eater (2003-08-08 13:59) [74]Иногда природа отдыхает не только на детях гениев.
Иногда она просто так отдыхает.
← →
Е-Моё имя (2003-08-08 14:11) [75]Reindeer Moss Eater © (08.08.03 13:59)
не, не отдыхает
тренируется
по нику сразу видно ;)))))))))
бугагагагаагаа))))))
← →
Reindeer Moss Eater (2003-08-08 14:15) [76]Е-Моё имя
Ну да, согласен полностью.
← →
_test_ (2003-08-08 14:32) [77]Удалено модератором
Примечание: Предупреждение тебе.
← →
Maximka (2003-08-18 21:19) [78]Читал я, читал.....
А можно было просто установить старые компоненты.
Сделать с этого модуля *.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) [79]Читал я, читал.....
А можно было просто установить старые компоненты.
Сделать с этого модуля *.dpk и инсталл его...
unit RegSockComps;
interface
procedure Register;
implementation
uses
ScktComp, Classes, DesignIntf;
procedure Register;
begin
RegisterComponents("Internet", [TServerSocket, TClientSocket]);
end;
end.
Страницы: 1 2 вся ветка
Форум: "Сети";
Текущий архив: 2003.10.13;
Скачать: [xml.tar.bz2];
Память: 0.62 MB
Время: 0.009 c