У меня есть программа клиент, в которой указывается по каким ip нужно сохранить определенный файл. На машинах с указанными ip адресами должны стоять сервера, которые прослушивают порт и при необходимости принимают файл и далее его обрабатывают.
Я с клиента посылаю запрос на сервер о его готовности и сервер у меня зависает.
код
| Код |
сервер
unit Unit1; interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ScktComp, ComCtrls, Menus;
type TForm1 = class(TForm) ProgressBar1: TProgressBar; ServerSocket1: TServerSocket; Panel1: TPanel; Memo1: TMemo; OpenDialog1: TOpenDialog; Edit1: TEdit; MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; N4: TMenuItem; N5: TMenuItem; Edit2: TEdit; procedure N3Click(Sender: TObject); procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); private { Private declarations } public // Procedure SendFileBySocket(filename: string);
{ Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.N3Click(Sender: TObject); begin ServerSocket1.Active:=true; memo1.Lines.Add('open'); end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var s:string; begin s:=Socket.ReceiveText; memo1.Lines.Add(s); end;
end.
КЛИЕНТ
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ScktComp, ComCtrls, StdCtrls, Menus;
type TForm1 = class(TForm) ProgressBar1: TProgressBar; ClientSocket1: TClientSocket; Memo1: TMemo; MainMenu1: TMainMenu; Comands1: TMenuItem; Activetrue1: TMenuItem; send1: TMenuItem; procedure Activetrue1Click(Sender: TObject); procedure ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); procedure send1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1; Reciving: boolean; DataSize: integer; Data: TMemoryStream; implementation
{$R *.dfm}
procedure TForm1.Activetrue1Click(Sender: TObject); begin ClientSocket1.Active:=true; end;
procedure TForm1.send1Click(Sender: TObject); begin ClientSocket1.Socket.SendText('Are you ready'); end;
|
Мне необходимо обменяться сообщениями между клиентом и сервером, а после передать файл серверу и при этом отобразить прогресс на клиенте и сервере |