![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
IdTCPClient [D7, XP]
tigraman © (2007-04-24 23:55:00)Здравствуйте. Такой вопрос: Я передаю данные через IdTCPClient, все нормально если я передаю сроку вида
IdTCPClient.WriteLn('text'), но если я пытаюсь засунуть туда переменную
IdTCPClient.WriteLn(Edit1.Text);при выполнении данного кода все подвисает, подкажите где я не прав.
tigraman (2007-04-26 19:34:00) [1]Хорошо, вот код:
Отпраляю команду
IdTCPClient.Host := frmMain.Edit1.Text;
IdTCPClient.Port := 9542;
IdTCPClient.Connect;
IdTCPClient.WriteLn(NetCombobox.Text+'|'+Edit2.Text);
IdTCPClient.Disconnect;
Обрабатываю команду
procedure TfrmMain.IdTCPServerExecute(AThread: TIdPeerThread);
var
Command,comman2,pass : String;
begin
Command := AThread.Connection.ReadLn;
comman2:=copy(Command,0,pos('|',Command)-1);
pass:=copy(Command,pos('|',Command)+1,1500);
AThread.Connection.WriteLn('Command execute sucsesful');
if (pass= RegReadStr(HKEY_LOCAL_MACHINE,'Software\netshut\s','r'))
and
(form2.SecurityCheckBox1.Checked=true) then begin
AThread.Connection.WriteLn('Action has been execute!');
if comman2=NetCombobox.Items.Strings[0]
then form1.Poweroff1.Click;
if comman2=NetCombobox.Items.Strings[1]
then form1.Reboot1.Click;
if comman2=NetCombobox.Items.Strings[2]
then form1.Logoff1.Click;
if comman2=NetCombobox.Items.Strings[3]
then form1.Hibernate1.Click;
if comman2=NetCombobox.Items.Strings[4]
then form1.Suspend1.Click;
end
else begin
AThread.Connection.WriteLn('Error, password wrong!');
end;
end;
А тут, как я понимаю, должен быть обработан ответ сервера
procedure TfrmMain.IdTCPClientConnected(Sender: TObject);
var
LString : String;
begin
LString := IdTCPClient.ReadLn;
StatusBar.SimpleText:=LString;
end;
С точки зрения мастеров на сколько глупо выглядит код? И как правильно передавать переменные, или и так нормально?
Сергей М. (2007-04-26 09:56:00) [2]
> Чего то не выходит
А вошло ли это "чего то" вообще ?
Показывай код ..
tigraman (2007-04-25 22:14:00) [3]А можно еще вопрос? на событие компонетна IDTCPServer я получаю и обрабатываю данные посланные клиентом, только как потом сообщить клиенту о результате обработки данных?
Вот так AThread.Connection.WriteLn('Команда выполнена успешно'); Но на какое событие клиента их обрабатывать? На IdTCPClientConnected? Чего то не выходит, хотя в примере что я видел вроде так было.
tigraman (2007-04-25 21:43:00) [4]Вижу сообщение Текущий поток - основной. Но непоняное дело, на другом компьютере ничего не меняя вроде все работает нормально, может что-то с сетью, хотя странно как-то.
Сергей М. (2007-04-25 08:35:00) [5]if GetCurrentThreadId = MainThreadId then
MessageBox(0, 'Текущий поток - основной', '', mbOk or mbSetforeground)
else
MessageBox(0, 'Текущий поток - дополнительный', '', mbOk or mbSetforeground);
try
IdTCPClient.WriteLn(Edit1.Text);
except
on e:exception do
MessageBox(0, PChar(e.Classname + ' ' + e.Message), '', mbOk or mbSetforeground);
end;
Какие сообщения видишь при этом ?
tigraman (2007-04-25 08:26:00) [6]А по подробнее можно объяснить что это?
Сергей М. (2007-04-25 08:06:00) [7]GetCurrentThreadId = MainThreadId ?