Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 18.10.2017, 10:47   #1
Amilman
Пользователь
 
Регистрация: 19.12.2012
Сообщений: 39
Репутация: 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.

Amilman вне форума   Ответить с цитированием
Ответ

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача форматированного текста между socket-клиентами с RichEdit`ами. Klaxwork Общие вопросы Delphi 4 18.12.2013 16:45
Дерево, проблема с node-div'ами Lime HTML и CSS 4 20.07.2012 00:21
Проблема: Netty + Socket celt11 Общие вопросы по Java, Java SE, Kotlin 0 31.03.2012 16:37
проблема с мигающими shape'ами и картинками Chugun Помощь студентам 1 04.02.2009 23:24


19:58.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru