Доброго времени суток.
Проблема такая, написаны два приложения: Клиент и Сервер.
Из клиента на сервер я могу передать сообщение а с сервера на клиент ничего не происходит.
Что я не так делаю?
Код Сервера
Код:
unit Alarmist_S;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, ScktComp,
Vcl.Buttons, Vcl.Imaging.pngimage, System.ImageList, Vcl.ImgList;
type
TForm1 = class(TForm)
Timer1: TTimer;
ClientSocket1: TClientSocket;
GroupBox1: TGroupBox;
StaticText1: TStaticText;
StaticText2: TStaticText;
StaticText3: TStaticText;
Button1: TButton;
GroupBox2: TGroupBox;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn1: TBitBtn;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
function FileCount(Dir: string): integer;
implementation
{$R *.dfm}
function FileCount(Dir: string): integer;
var
fs: TSearchRec;
begin
Result := 0;
if FindFirst(Dir + '\*.*', faAnyFile, fs) = 0 then
repeat
inc(Result);
until FindNext(fs) <> 0;
FindClose(fs);
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if not ClientSocket1.Active then
try
ClientSocket1.Active:=true;
BitBtn2.Enabled := True;
except
ShowMessage('Нет соединения с клиентом');
end;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
case BitBtn2.Tag of
0:
begin
ClientSocket1.Socket.SendText('MyIP' + Edit3.Text);
BitBtn2.Caption := 'Отключиться';
BitBtn2.Tag := 1;
end;
1:
begin
BitBtn2.Caption := 'Подключиться';
BitBtn2.Tag := 0;
ClientSocket1.Socket.SendText('NoIP' + Edit3.Text);
ClientSocket1.Active := False;
BitBtn2.Enabled := False;
ClientSocket1.Close;
end;
end;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
ClientSocket1.Socket.SendText('NoIP' + Edit3.Text);
ClientSocket1.Active := False;
ClientSocket1.Close;
Close;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
StaticText1.Caption := IntToStr(FileCount('C:\TEST\Новая папка') - 2) +
' кол-во';
StaticText2.Caption := IntToStr(FileCount('C:\TEST\Новая папка1') - 2) +
' кол-во';
StaticText3.Caption := IntToStr(FileCount('C:\TEST\Новая папка2') - 2) +
' кол-во';
ClientSocket1.Socket.SendText('печаль!');
end;
procedure TForm1.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ErrorCode := 0;
end;
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
Var
s: string;
begin
Beep();
s := Socket.ReceiveText;
Label1.Caption := s;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ClientSocket1.Address := Edit2.Text;
ClientSocket1.Port := StrToInt(Edit1.Text);
end;
end.
Код Клиента
Код:
unit Alarmist_C;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, ScktComp, Vcl.StdCtrls, Vcl.Buttons, Vcl.ExtCtrls,
SplashScreen, pngimage;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
ServerSocket1: TServerSocket;
GroupBox1: TGroupBox;
ListBox1: TListBox;
BitBtn3: TBitBtn;
Button1: TButton;
Button2: TButton;
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure BitBtn3Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Splash: TSplash;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
png: TPNGImage;
begin
case Button1.Tag of
0:
begin
Button1.Tag := 1;
png := TPNGImage.Create;
png.LoadFromFile('cat_alarm.png');
Splash := TSplash.Create(png);
Splash.Show(false);
end;
1:
begin
Button1.Tag := 0;
Splash.Close;
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i: Integer;
begin
for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
ServerSocket1.Socket.Connections[i].SendText('#N');
Exit;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.Open();
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
Var
s: string;
i: Integer;
begin
s := Socket.ReceiveText;
if copy(s, 1, 4) = 'MyIP' then
ListBox1.Items.Add(copy(s, 5, length(s)))
else if copy(s, 1, 4) = 'NoIP' then
begin
for i := 0 to ListBox1.Items.Count - 1 do
if copy(s, 5, length(s)) = ListBox1.Items[i] then
ListBox1.Items.Delete(i);
end
else
begin
Label1.Caption := s;
end
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
ServerSocket1.Active := false;
ServerSocket1.Close;
Close;
end;
end.