![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый вечер, я в Delphi новичок, так что сильно не пинать-)
Набросал вот такой вот код КЛИЕНТ Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
StdCtrls, IdAntiFreezeBase, IdAntiFreeze;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
IdTCPClient1: TIdTCPClient;
Edit2: TEdit;
Label1: TLabel;
Memo1: TMemo;
IdAntiFreeze1: TIdAntiFreeze;
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add('Подключение к '+Edit1.Text+'...');
idTCPClient1.Host:=Edit1.Text;
idTCPClient1.Port:=9393;
idTCPClient1.Connect();
if idTcpClient1.Connected then
begin
Memo1.Lines.Add('Подключился');
Button3.Visible:=True;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
SO: String;
begin
if (idTCPClient1.Connected = true) and (Trim(Edit2.Text) <> '') then
idTCPClient1.WriteLn(Edit2.Text);
SO:= idTCPClient1.ReadLn();
Edit2.Text := '';
Memo1.Lines.Add(SO);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Lines.Add('Отключен от '+Edit1.Text+' ...');
idTCPClient1.Disconnect;
Button3.Visible:=false;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Button3.Visible:=False;
end;
end.СЕРВЕР Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPServer, IdAntiFreezeBase,
IdAntiFreeze, IdIPWatch;
type
TForm1 = class(TForm)
IdTCPServer1: TIdTCPServer;
IdAntiFreeze1: TIdAntiFreeze;
IdIPWatch1: TIdIPWatch;
procedure IdTCPServer1Execute(AThread: TIdPeerThread);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
ip: string;
implementation
{$R *.dfm}
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
begin
if Athread.Connection.ReadLn=('ping') then
begin
AThread.Connection.Writeln('ok');
end
else
if Athread.Connection.ReadLn=('cmd') then
begin
AThread.Connection.Writeln('Команда CMD выполнена');
end
else
begin
if Athread.Connection.ReadLn=('msg') then
begin
AThread.Connection.Writeln('фраза показана');
ShowMessage('Сообщение');
end
else
begin
if Athread.Connection.ReadLn=('ip') then
ip:=IdIPWatch1.LocalIP;
sleep(2000);
AThread.Connection.Writeln('IP машины '+ip);
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
idTCPServer1.Active:=True;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
idTCPServer1.Active:=False;
end;
end.{Старая проблема, решена благодаря Alegun} Проблема в том, что когда я в edit2.text ввожу cmd, то сообщение "все ок" не показывается, но если я делаю так: Код:
procedure TForm1.Button3Click(Sender: TObject);
begin
idTCPClient1.WriteLn('cmd');
end;РЕШЕНИЕ Код:
procedure TForm1.Button3Click(Sender: TObject);
begin
idTCPClient1.WriteLn('Edit2.Text'); //Явно лишние кавычки, если только не название едита записывается.
end;Последний раз редактировалось snr93, 23.03.2013 в 13:06. |
|
#2
|
||||
|
||||
|
Код:
procedure TForm1.Button3Click(Sender: TObject);
begin
idTCPClient1.WriteLn('Edit2.Text'); //Явно лишние кавычки, если только не название едита записывается.
end; |
|
#3
|
|||
|
|||
|
Я тоже так думал, но и без кавычек ничего не пашет
|
|
#4
|
||||
|
||||
|
Цитата:
Код:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
begin
if Athread.Connection.ReadLn = 'cmd' then ShowMessage('все ок');
if Athread.Connection.ReadLn = '' then ShowMessage('Команда пришла пустой');
ShowMessage(Athread.Connection.ReadLn); // Добавить временно
end; Последний раз редактировалось Alegun, 23.03.2013 в 01:10. |
|
#5
|
|||
|
|||
|
Так, тут заработало, отлично, но вот проблема, когда я подключаюсь и пишу команду cmd, то сервер отвечает после 2-3 отправок этой команды. Как тут быть? Как узнать что сервер принял команду и выполнил? Все что я надумал это:
Сервер при получении сообщения отправляет сообщение клиенту о том что он его понял и услышал, а если клиенту не пришло ответа, то повторить автоматом 3 раза с интервалом 3 секунды и если опять ничего то выдать ответ что неполучилось. Но это занимает много времени. Можно ли как нибудь ускорить процесс проверки услышал ли сервер клиент или нет? |
|
#6
|
|||
|
|||
|
собуствую, в гугле забанили...
на линк: http://www.freelancecode.net/communi...opic.php?p=371 |
|
#7
|
|||
|
|||
|
P.S. вверху изменил код клиента и сервера.
Очень странно все равно ведет себя сервер. Когда я пишу ping, то он без задержек присылает что все ок, но стоит ввести другую команду, допустим msg, то сервер потухает и ничего не показывает, приходится несколько раз посылать команду, чтобы он ее выполнил. А если послать IP, то все. Программа долго думает и после нескольких отправок команды иногда или зависает, или присылает пустой ip, редко когда бывает что-бы он мне выслал мой ip. Может кто помочь? Мне кажется это из-за корявости кода. P.S.S Кстати, еще у меня windows 7 x64, а делфи для x32, может тут проблема? P.S.S.S Если человек спрашивает на ФОРУМЕ вопрос, то не надо посылать его в гугл, он там вероятнее всего был. Последний раз редактировалось snr93, 23.03.2013 в 13:07. |
|
#8
|
||||
|
||||
|
Цитата:
|
|
#9
|
|||
|
|||
|
Я не понял где взять компонент FMX который там используется? Это не стандартный indi компонент вроде
|
|
#10
|
||||
|
||||
|
Цитата:
|
|
#11
|
|||
|
|||
|
Спасибо всем. Посмотрел статью и прислушался к вашим комментариям и сам все переписал как надо без использования FMX и других дополнительных компонентов. Теперь все работает как часы-))
|
|
#12
|
|||
|
|||
|
Цитата:
А как ты думаешь, как я нашел страничку, ссылку на которую тебе и дал? Или ты думаешь, что я на память знаю странички с примерами на каждый случай? |
|
#13
|
||||
|
||||
|
Цитата:
|