Avatar billede danielhep Nybegynder
22. april 2002 - 14:49 Der er 22 kommentarer og
1 løsning

Send Files

Dette spøgsmål handler kun om Borland Builder C++ 5.0!!!

Hvis man f.eks har et chat program og man så vil sende filer til en anden bruger hvordan kan man så¨gøre det i builderen??

Hvis der er nogle som har en kode eller et link så ville det være helt fint..
Avatar billede laffe Nybegynder
22. april 2002 - 15:26 #1
Man kunne sende dem via socket.
I CBuilder med en TServerSocket/TClientSocket.

TClientSocket->SendStream(TStream* AStream);

1. Skab en socket forbindelse mellem A og B
2. A Sender filen over til B.
3. B modtager stream.

Det burde være nemt da det er en form for en vejskommunication. Fra A -> B
Avatar billede laffe Nybegynder
22. april 2002 - 15:27 #2
Har desværre ikke noget kode lige nu. Men jeg kan lave noget lidt senere.
Avatar billede laffe Nybegynder
22. april 2002 - 15:42 #3
Her flytter jeg en fil fra A til B via TStream.

Den måde jeg modtager daat på kan helt sikkert laves bedre, men nedenstående viser princippet i det.



//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Server->Open();   
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
  Client->Open(); 
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
  Server->Close();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)
{
  Client->Close();
}
//---------------------------------------------------------------------------


void __fastcall TForm1::ServerListen(TObject *Sender,
      TCustomWinSocket *Socket)
{
  Memo1->Lines->Add("Listen");
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ClientConnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
  Memo2->Lines->Add("Connect");
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)
{
  TFileStream *F;
  F = new TFileStream("Unit1.h",fmOpenRead    );

  Client->Socket->SendStreamThenDrop(F);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ServerClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
  Memo1->Lines->Add("Reading...");
  char Buffer[1024*128];
  unsigned ch;
  int i=0;
  while (Socket->ReceiveBuf(&ch,1)==1)
  {
    Buffer[i++] = ch;
  }
  Memo1->Lines->Add(Buffer);
}
//---------------------------------------------------------------------------
Avatar billede kamikaze Nybegynder
22. april 2002 - 15:43 #4
Logikken er ret simpel. Du sender via sockets, som beskrevet af laffe.

Du bør dog bryde filen ned i mindre segmenter, da der er en max. størrelse på TCP-pakker. Disse segmenter skal sendes en ad gangen, og modtageren skal så samle dem til en fil igen.

Jeg er på arb. lige nu, men kan poste koden til en fil-server/klient lavet i builder når jeg kommer hjem.
Avatar billede laffe Nybegynder
22. april 2002 - 15:49 #5
> kamikaze. Jeg håndterer kun 1 byte ad gangen. derfor behøver jeg ikke spekulere over størrelsen på TCP pakker.

Man kan så diskutere, og min måde er særlig hurtig ;).
Avatar billede kamikaze Nybegynder
22. april 2002 - 15:51 #6
laffe >> sorry, det så jeg ikke i farten :o)
Avatar billede danielhep Nybegynder
22. april 2002 - 16:11 #7
Meget meget godt..Men lige en lille forspørgsel....Jeg er rimlig grøn i Builder, og er ikke så meget inde i den...Så ville det være for meget at spørge om "Laffe" om du ville putte koden ind i en form, og sende den til "danielhep@ofir.dk"????
Avatar billede laffe Nybegynder
22. april 2002 - 17:33 #8
Du skal få koden...
Avatar billede laffe Nybegynder
22. april 2002 - 18:17 #9
Jeg har ikke givet nogen af knapperne en fornuftig caption. Spørg, hvis der er noget.
Avatar billede laffe Nybegynder
23. april 2002 - 11:01 #10
>Danielhep. Virker det ?
Avatar billede danielhep Nybegynder
23. april 2002 - 11:38 #11
Laffe>>

Ja det virker da..Men jeg kan bare ikke finde ud af at gøre sådan så det er 2 programmer...Jeg har nemlig 2 computere....
Avatar billede laffe Nybegynder
23. april 2002 - 12:45 #12
I din server applikation placerer du en TServerSocket component.
I din client applikation placerer du en TClientSocket component.

Server applikation ligger på Computer A.
Client applikation ligger på Computer B.

I din client applikation skal du angive ip-adr. på Computer A (din server). Dette gøres på din TClientSocket->Host property.

Du skal også angive en port som begge applikationer bruger f.eks: port 8888.
Avatar billede laffe Nybegynder
23. april 2002 - 12:59 #13
> danielhep. Jeg har lavet en Client og en Server applikation. Vil du have dem ?
Avatar billede danielhep Nybegynder
23. april 2002 - 15:04 #14
JA meget gerne..
Avatar billede danielhep Nybegynder
23. april 2002 - 15:16 #15
Hvad skal jeg ændre her for at få filen "test.txt" ned på harddisken hvor jeg har lyst til???

void __fastcall TForm1::ServerClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
  Memo1->Lines->Add("Reading...");
  char Buffer[1024*128];
  unsigned ch;
  int i=0;
  while (Socket->ReceiveBuf(&ch,1)==1)
  {
    Buffer[i++] = ch;
  }
  Memo1->Lines->Add(Buffer);
}
Avatar billede laffe Nybegynder
23. april 2002 - 20:07 #16
I mit eksempel kan du skrive:

void __fastcall TForm1::ServerClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
  Memo1->Lines->Add("Reading...");
  char Buffer[1024*128];
  unsigned ch;
  int i=0;
  while (Socket->ReceiveBuf(&ch,1)==1)
  {
    Buffer[i++] = ch;
  }
  Memo1->Lines->Add(Buffer);
  Memo1->Lines->SaveToFile("nyfil.txt");    <---------------
}
Avatar billede danielhep Nybegynder
23. april 2002 - 20:41 #17
Hva nu hvis det ikke er en *.txt fil som jeg vil sende..Men en *.zip??
Avatar billede laffe Nybegynder
23. april 2002 - 21:42 #18
void __fastcall TForm1::ServerClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
  Memo1->Lines->Add("Reading...");
  unsigned ch;
  int H;
  H = FileCreate("NyFil.dat");
  while (Socket->ReceiveBuf(&ch,1)==1)
  {
    FileWrite(H,cg,1);
  }
  FileClose(H);
}
Avatar billede laffe Nybegynder
23. april 2002 - 21:43 #19
Howsa, en skrive bøf

FileWrite(H,cg,1);  ->  FileWrite(H,ch,1);
Avatar billede danielhep Nybegynder
23. april 2002 - 21:45 #20
Den siger at der er en fejl i sætningen:
FileWrite(H,cg,1);

Det er "cg" den ikke kan forstå??
Avatar billede laffe Nybegynder
23. april 2002 - 21:47 #21
der skal stå ch istedet for.
Avatar billede laffe Nybegynder
23. april 2002 - 21:49 #22
Sorry. Her kommer den rigtige:

FileWrite(H,&ch,1);
Avatar billede danielhep Nybegynder
24. april 2002 - 17:00 #23
ok..Jeg kigger på det...tak for hjælpen :)
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