Nogen der kender en simpel måde at sende en fil med server/clientSocket komponentet? Jeg har prøvet den på SwissDelphiCenter.ch. Jeg prøvede at sende en BMPfil, men det modtagede billede blev helt fucket op . Hvis i kommer med noget kode vil jeg gerne ha lidt forklaring for er ikke så stiv i filestream stuff.
I Serveren skal du skrive:
<pre>ServerSocket.SendStream (TFileStream.Create ('C:\\BmpFil.bmp', fmOpenRead or fmShareDenyWrite));</pre>Det sender C:\\BmpFil.bmp som et TFileStream.
I Klientens private sektion skal du tilføje:
<pre>Buffer: array [0..9999] of Char;</pre>
Og i ClientSocket onRead:
<pre>procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
strIn: string;
Stream: TMemoryStream;
nReceived: Integer;
begin
Stream := TMemoryStream.Create; // Forbered Streamet
Screen.Cursor := crHourglass; // Det kan godt tage lidt tid så gør musen til et timeglas
try
while True do // En lykke der altid er sand
begin
nReceived := Socket.ReceiveBuf (Buffer, sizeof (Buffer)); // Modtag en del til "Buffer"
if nReceived <= 0 then // nReceived er 0 hvis der ikke er modtaget noget
Break // i så fald skal vi afbryde lykken
else
Stream.Write (Buffer, nReceived); // ellers skal vores Stream udvides det der modtaget
Sleep (200); // forsink 200 millisekunder
end;
Stream.Position := 0; // Læs fra Streamets start
Image1.Picture.Bitmap.LoadFromStream (Stream); // Indlæs det til Image1 (denne linie skal kun
finally // med hvis det er et billede der bliver sendt)
Stream.Free; // Fjern billedet fra hukommelsen
Screen.Cursor := crDefault; // Sæt musen tilbage
end;
end;</pre>
Du kan gøre det samme med en hvilken som helst anden fil, der skal du bare ikke sætte det ind i et image.
Emil Melgaard
emil.melgaard@private.dk
- Admin på gruppen Delphi spilprogrammering.
http://www.delphispilprogram.udvikleren.dk