![]() |
|
|
#1
|
|||
|
|||
|
Мне нужна процедура, которая будет выполнять следующие шаги:
1.настроит соединение 2.отправит 2 сообщение 3.разорвет соединение Код:
procedure OnOff (ip,pass,onORoff: String;CS: TClientSocket);
begin
CS.Port:= 2424;
CS.Host:= ip;
CS.Active:=True;
//не успевает соединиться, как программа уже кидает сообщение, следовательно сообщение не доходит.
CS.Socket.SendText('$KE,PSW,SET,'+ pass +#13+#10);
if(onORoff = 'on')
then begin
CS.Socket.SendText('$KE,WR,1,0'+#13+#10);
end
else begin
CS.Socket.SendText('$KE,WR,1,1'+#13+#10);
end;
CS.Active:=False;
end;как решить проблему? думал решить проблему добавив: sleep(500); но программа перестает вообще что-то делать. Последний раз редактировалось Dzman, 02.03.2013 в 13:42. |
|
#2
|
||||
|
||||
|
Цитата:
|
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Dzman (02.03.2013)
| ||
|
#3
|
|||
|
|||
|
Цитата:
Чтобы получать сообщения надо использовать компонент TcpServer? пчму-то не хочет сообщения принимать, если есть какой-нибудь пример, с радостью разберу код. Вот так работает отлично. Код:
procedure TForm1.OnOff (ip,pass,onORoff: String);
begin
TC1.RemoteHost:= ip;
TC1.RemotePort:='2424';
TC1.Active:=True;
TC1.Sendln('$KE,PSW,SET,'+pass+#13+#10);
if(onORoff = 'on')
then begin
TC1.Sendln('$KE,WR,1,0'+#13+#10);
Memo1.Lines.Add('on');
end
else begin
TC1.Sendln('$KE,WR,1,1'+#13+#10);
Memo1.Lines.Add('off');
end;
sleep(500);
TC1.Active:=False;
end;Вопрос: Как уменьшить время, которое синхронный сокет блокирует программу в тех случаях, когда не может подключиться? оказывается и ClientSocket можно было в синхронный режим перевести, тупанул чутка. Но проблема с замораживанием интерфейса осталась, как можно её решить? Немного полазив нашел компонент TidAntiFreeze, который размораживает все компоненты, которые не относятся к системе Indy, но тогда и сокет надо из системы Indy брать. Получается никак не сделать нормально, без размазывания кода по разным процедурам? ![]() Последний раз редактировалось Dzman, 02.03.2013 в 21:02. |