|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
Проблема с 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. |