Avatar billede kokoko Nybegynder
27. februar 2002 - 19:37 Der er 4 kommentarer og
1 løsning

Modtage fil via TClientSocket

Jeg prøver på at modtage en fil via TClientSocket, men det virker ikke rigtig..

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
  buf: array [0..5000] of byte;
  fil: file of byte;
  br:  longint;
begin;
  assignfile(fil,'c:\test.txt');
  rewrite(fil);
  repeat
    br:=socket.receivebuf(buf,5001);
    blockwrite(fil,buf,br);
  until (br=0);
  closefile(fil);
end;

Når den har modtaget de første bytes kommer den med en EInOutError: "I/O error 998" ... jeg har fundet frem til denne fejl beskrivelse, men den hjælper mig ikke meget: "Invalid access to memory location".
På forhånd tak!
Avatar billede cms Nybegynder
27. februar 2002 - 20:29 #1
Jeg ved godt det er et halvt svar, men jeg har altid haft problemer med Client+ServerSockets. Brug istedet Indy's komponenter, der følger også gode eksempler med, hvis du tager version 8 og ikke 9 som er i beta.
www.nevrona.com/indy
Avatar billede kokoko Nybegynder
27. februar 2002 - 20:33 #2
oki... men jeg synes kun jeg kunne finde nogle eksempler til indy som viste hvordan man sendte og modtog via stream... kan du sige hvilket eksempel jeg skal kigge på?
Avatar billede kokoko Nybegynder
28. februar 2002 - 08:58 #3
Øhh som sagt har jeg ikke noget imod at bruge et andet komponent, som f.eks. Indy... jeg vil bare gerne have noget kode der virker!
Avatar billede cluq Nybegynder
28. februar 2002 - 16:45 #4
Jeg ved der er en bug i Client/Server delen i Delphi, men jeg ved ikke lige om det dit problem - prøv at kigge på borlands hjemmeside.
Avatar billede kokoko Nybegynder
28. februar 2002 - 18:30 #5
Jeg fandt selv ud af det, her er koden:

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
  Buffer: Array [0..9999] of Char;
  nReceived: Integer;
  Fil: File of Byte;
begin;
  AssignFile(Fil,'c:\test.txt');
  Reset(Fil);
  Seek(Fil,FileSize(Fil));
  try
    while True do
      begin
        nReceived := Socket.ReceiveBuf(Buffer, sizeof(Buffer));
        if nReceived <= 0 then
          Break
        else
          BlockWrite(Fil,Buffer,nReceived);
        Sleep (200);
      end;
  finally
    CloseFile(Fil);
  end;
end;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester