beudet
Messages postés122Date d'inscriptionvendredi 19 octobre 2007StatutMembreDernière intervention24 février 2011
-
30 mars 2009 à 11:52
beudet
Messages postés122Date d'inscriptionvendredi 19 octobre 2007StatutMembreDernière intervention24 février 2011
-
11 mai 2009 à 09:04
Bonjour, je dois réaliser un client/serveur qui doit permettre l'envoie de fichiers via TCP/IP, j'arrive à envoyer une chaîne de caractère, mais je bloque complètement pour les fichiers. J'ai commencé à faire un bout de code mais ça ne fonctionne pas. Pouvez-vous m'aider ?
Coté client :
SessionConnected
var
fs : TFileStream;
Buf : array[0..4095] Of Byte;
begin
fs:= TFileStream.Create('C:\Documents and Settings\Stagiaire3\a.pdf', fmOpenRead);
fs.Read(Buf, SizeOf(Buf));
fs.Write(Buf, SizeOf(Buf));
WSocket1.Send(fs, SizeOf(Buf));
end;
Coté serveur:
DataAvailable
var
fs : TFileStream;
Len : int64;
Buf : array[0..4095] Of Byte;
begin
//Création du Filestream
fs:= TFileStream.Create('C:\Documents and Settings\Stagiaire3\Bureau\azerty.pdf',fmCreate);
Len:= WSocket1.Receive(@Buf, SizeOf(Buf));
fs.Write(Buf, Len);
end;
type
TStreamPacket = record // 4Ko
FileName : shortstring;
FileSize : int64;
DataSize : integer;
Datas : array[0..StreamDataSize-1] of Byte;
end;
const
StreamPacketSize = SizeOf(TStreamPacket);
procedure TForm1.FormCreate(Sender: TObject);
begin
WSocket1.Addr:= '192.168.0.112';
WSocket1.Port:= '1985';
WSocket1.Proto:= 'tcp';
WSocket1.Listen; Memo1.Lines.Add('Serveur en écoute');
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
WSocket1.Close;
end;
procedure TForm1.WSocket1SessionAvailable(Sender: TObject; ErrCode: Word);
var
NewSocket : TSocket;
begin
{We need to accept the client connection}
NewSocket:= WSocket1.Accept;
{And then associate this connection with our client socket}
WSocket1.Dup(NewSocket); Memo1.Lines.Add('Connexion établie');
end;
procedure TForm1.WSocket1DataAvailable(Sender: TObject; ErrCode: Word);
var
PQ : TStreamPacket;
FileNameReceived: string;
Len : Integer;
begin
Len:= WSocket1.Receive(@PQ, StreamDataSize);
if (Len <= 0) then Exit;
FileNameReceived:= 'C:\Documents and Settings\Bureau\test.jpg';
with TFileStream.Create(FileNameReceived, fmCreate) do begin
try
if (Size < PQ.FileSize) then begin
//while (Size < PQ.FileSize) do begin
//Position:= Size - 1;
Memo1.Lines.Add('Taille : ' + IntToStr(Size));
Memo1.Lines.Add('Position : ' + IntToStr(Position));
Write(PQ.Datas[0], PQ.DataSize);
Memo1.Lines.Add('Données : ' + IntToStr(Len));
end;
finally
Memo1.Lines.Add('Taille finale : ' + IntToStr(Size));
Free;
end;
end;
WSocket1.SendStr('OK');
end;
procedure TForm1.WSocket1SessionConnected(Sender: TObject; ErrCode: Word);
var
PQ : TStreamPacket;
begin
if (ErrCode <> 0) then
Memo1.Lines.Add('Impossible de se connecter, erreur #' + IntToStr(ErrCode))
else begin Memo1.Lines.Add('Connecté');
PQ.FileName:= ExtractFileName('C:\Documents and Settings\test.jpg');
with TFileStream.Create('C:\Documents and Settings\test.jpg', fmOpenRead) do begin
try
PQ.FileSize:= Size;
Position:= 0;
//PQ.DataSize:= StreamDataSize;
while (Position <> Size) do begin
PQ.DataSize:= Read(PQ.Datas[0], StreamDataSize);
Memo1.Lines.Add('Position : ' + IntToStr(Position));
WSocket1.Send(@PQ, PQ.DataSize);
end;
finally
free;
end;
end;
end;
end;
procedure TForm1.WSocket1DataAvailable(Sender: TObject; ErrCode: Word);
var
str : string;
begin
str:= WSocket1.ReceiveStr;
Memo1.Lines.Add(str);
end;
type
TStreamPacket = record // 4Ko
FileName : shortstring;
FileSize : int64;
DataSize : integer;
Datas : array[0..StreamDataSize-1] of Byte;
end;
const
StreamPacketSize = SizeOf(TStreamPacket);
procedure TForm1.FormCreate(Sender: TObject);
begin
WSocket1.Addr:= '192.168.0.112';
WSocket1.Port:= '1985';
WSocket1.Proto:= 'tcp';
WSocket1.Listen;
TimeBoot; Memo1.Lines.Add('Serveur en écoute');
FileNameReceived:= 'C:\Documents and Settings\Bureau\test.jpg';
//if not FileExists(FileNameReceived) then
FStream:= TFileStream.Create(FileNameReceived, fmCreate);
FStream.Position:= 0;
//else
//FStream:= TFileStream.Create(FileNameReceived, fmOpenReadWrite);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
WSocket1.Close;
FStream.Free;
end;
procedure TForm1.WSocket1SessionAvailable(Sender: TObject; ErrCode: Word);
var
NewSocket : TSocket;
begin
{We need to accept the client connection}
NewSocket:= WSocket1.Accept;
{And then associate this connection with our client socket}
WSocket1.Dup(NewSocket); Memo1.Lines.Add('Connexion établie');
end;
procedure TForm1.WSocket1DataAvailable(Sender: TObject; ErrCode: Word);
var
PQ : TStreamPacket;
Len : Integer;
begin
Len:= WSocket1.Receive(@PQ, StreamDataSize);
if (Len <= 0) then Exit;
//FStream.Position:= 0;
try
//if (FStream.Size < PQ.FileSize) then begin
//while (Size < PQ.FileSize) do begin
Memo1.Lines.Add('Taille AVANT : ' + IntToStr(FStream.Size));
Memo1.Lines.Add('Position AVANT : ' + IntToStr(FStream.Position));
FStream.Write(PQ.Datas[0], PQ.DataSize);
Memo1.Lines.Add('Données : ' + IntToStr(Len));
FStream.Position:= FStream.Size;
Memo1.Lines.Add('Taille APRES : ' + IntToStr(FStream.Size));
Memo1.Lines.Add('Position APRES : ' + IntToStr(FStream.Position));
//end;
finally
Memo1.Lines.Add('Taille finale : ' + IntToStr(FStream.Size));
end;
WSocket1.ProcessMessages;
//WSocket1.SendStr('OK');
end;
procedure TForm1.TimeBoot;
var
Millisecondes, Secondes, Minutes, Heures, Jours , tps: Integer;
begin
Millisecondes:= GetTickCount;
Secondes:= Millisecondes div 1000;
Minutes:= Secondes div 60;
Secondes:= Secondes mod 60;
Heures:= Minutes div 60;
Minutes:= Minutes mod 60;
Jours:= Heures div 24;
Heures:= Heures mod 24;
tps:= Secondes + (Minutes * 60) + (Heures * 3600);
if ((Now - Jours) = Now) then
Memo1.Lines.Add('Windows n''a pas planté depuis aujourd''hui à ' + TimeToStr(Time - (tps/24/3600)) + Format(', ce qui représente %d heure(s), %d minute(s), %d seconde(s).',[heures, minutes, secondes]))
else
Memo1.Lines.Add('Windows n''a pas planté depuis le ' + DateToStr(Now - Jours) + ' à ' + TimeToStr(Time - (tps/24/3600)) + Format(', ce qui représente %d jour(s), %d heure(s), %d minute(s), %d seconde(s).',[jours, heures, minutes, secondes]));
end;