Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.014 c
8-40521
Soul_Reaver
2003-06-11 20:26
2003.10.13
DirectX и DelphiX на Delphi6


14-40585
Empleado
2003-09-23 11:18
2003.10.13
Вопрос, связанный с деревьями.


14-40665
Andryk
2003-09-22 15:47
2003.10.13
А не у кго не завалялось матричного 9 игольчатого принтера?


1-40349
Guzz
2003-09-30 19:04
2003.10.13
Сочетания клавиш


1-40415
Bezpal
2003-10-03 08:56
2003.10.13
Люди не знаете, есть ли где нить русский help для Delphi?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский