
23.03.2013, 00:27
|
Прохожий
|
|
Регистрация: 10.10.2012
Сообщения: 11
Репутация: 10
|
|
TCPClient1. Проблема с передачей сообщений
Добрый вечер, я в 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;
|