Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.10.2017, 08:34
Аватар для Amilman
Amilman Amilman вне форума
Новичок
 
Регистрация: 27.03.2011
Адрес: г.Кемерово
Сообщения: 98
Версия Delphi: XE
Репутация: 10
Печаль Проблема с Socket-ами

Доброго времени суток.
Проблема такая, написаны два приложения: Клиент и Сервер.
Из клиента на сервер я могу передать сообщение а с сервера на клиент ничего не происходит.
Что я не так делаю?
Код Сервера
Код:
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.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:43.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter