Как переслать файл через nonBlocking сокет

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Благодаря американской компьютеризированной системе выборов президента, тысячи российских хакеров смогли принять участие в голосовании…

// а форме ServerSocket1, ClientSocket1 : (Active := False,

// Host := localhost, Port := 2001, xType := xNonBlocking),

// OpenDialog1, Button1, Memo1.

procedure TfmMain.FormCreate(Sender: TObject);

begin

ServerSocket1.Active:=true;

ClientSocket1.Active:=true;

end;

{— Server —}

procedure TfmMain.Button1Click(Sender: TObject);

var

sStream : TMemoryStream;

begin

sStream := TMemoryStream.Create;

if not OpenDialog1.Execute then

Exit;

sStream.LoadFromFile(OpenDialog1.FileName);

ServerSocket1.Socket.Connections[0].SendStreamThenDrop(sStream);

end;

{— Client —}

const

MAX_BUF_SIZE = $4095;

var

fStream: TFileStream;

{OnConnect}

procedure TfmMain.ClientSocket1Connect(Sender: TObject;

Socket: TCustomWinSocket);

begin

fStream:= TFileStream.Create(‘Receive.fil’, fmCreate);

end;

{OnRead}

procedure TfmMain.ClientSocket1Read(Sender: TObject;

Socket: TCustomWinSocket);

var

count :Integer;

buffer: Array [0..MAX_BUF_SIZE] of Char;

begin

repeat

Socket.Lock;

count:= Socket.ReceiveBuf(buffer,SizeOf(buffer));

if count > 0 then

fStream.WriteBuffer(buffer,count);

Socket.Unlock;

until (count <= 0);

Memo1.Lines.Add(IntToStr(fStream.Size));

end;

{OnDisconnect}

procedure TfmMain.ClientSocket1Disconnect(Sender: TObject;

Socket: TCustomWinSocket);

begin

fStream.Free;

end;

{/codecitation}

Добавить комментарий