Skocz do zawartości

Sockety przesyłanie plików


CoLLeR

Polecane posty

Witam,

probuje napisać apikację server klient do przesyłania plików w Borland C++ w

program sie kompiluję jednak przesyłanie plików nie działa - nie mam już siły ... prosze o pomoc

Po strone serwera :

void __fastcall TForm1::SerwerClientRead(TObject *Sender,
 	TCustomWinSocket *Socket)
{
int Odczytane ;
char  Buf[1024] ;
String  Wiadomosc, Tmp ;
String NazwaPliku ;
 if (OdbierzPlik )
 {
Odczytane = Socket->ReceiveBuf(Buf , sizeof(Buf)) ;
Wiadomosc = Buf ;
if (Wiadomosc.Pos("/m:m") == 1)
{
 	Wiadomosc.Delete(1,4) ; //Delete(Wiadomosc , 1 , 4) ;
 	ROdebrane->Lines->Add(Wiadomosc) ;
 	SendMessage(ROdebrane->Handle , WM_VSCROLL , SB_BOTTOM , 0) ;
 	return ;
}

StatBar->SimpleText = "Odbieram plik, postęp: " + FormatFloat("0.00" , (F->Position / RozmiarPliku) * 100) + "%" ;
F->Write(Buf , Odczytane) ;
if (F->Position >= RozmiarPliku)
{
 	F->Free() ;
 	StatBar->SimpleText = "Przesyłanie zakończone sukcesem." ;
 	OdbierzPlik = false ;
 	BtnWyslijPlik->Enabled = true ;
}
 }
 else
 {
Wiadomosc = Socket->ReceiveText() ;
if (Wiadomosc == "/m:y")
{
 	WyslijPlik = true ;
 	while ( F->Position < F->Size )
 	{
   	Application->ProcessMessages() ;
   	if (!WyslijPlik ) break ;
   	Sleep(10) ;
   	Odczytane = F->Read(Buf , sizeof(Buf)) ;
   	Serwer->Socket->Connections[serwer->Socket->ActiveConnections - 1]->SendBuf(Buf , Odczytane) ;
   	StatBar->SimpleText = "Przesyłam plik, postęp: " + FormatFloat("0.00" , (F->Position / F->Size) * 100) + "%" ;
 	}
 	if (F->Position < F->Size ) StatBar->SimpleText = "Wysyłanie pliku przerwane." ;
 	else BtnWyslijPlik->Enabled = true ;
 	WyslijPlik = false ;
 	F->Free() ;
}
else if (Wiadomosc == "/m:n")
{
 	StatBar->SimpleText = "Użytkownik nie chce odebrać pliku." ;
 	BtnWyslijPlik->Enabled = true ;
 	F->Free() ;
}
else if (Wiadomosc.Pos("/m:p") == 1)
{

  	int len, i=1;
  	Tmp = Wiadomosc  ;
  	len = Wiadomosc.Length() ;
   	while(len--)
   	{
           	if(i <= 5 || i >= Tmp.Pos(";") )
           	Tmp[i] = ' ' ;
           	i++ ;
   	}
   	Tmp = Tmp.Trim()  ;
  	//len = StrToInt(n_s) ;
   	Test->Text = Tmp ; //n_s ;
  	//Tmp = Wiadomosc ;
  	//Tmp.Delete(5, Wiadomosc.Pos(";")-5) ;
  	RozmiarPliku = StrToInt(Tmp) ;
  	i=1;
   	Tmp = Wiadomosc ;
   	len = Wiadomosc.Length() ;
   	while(len--)
   	{
   	if( i <= Tmp.Pos(";") )
   	{
      		Tmp[i] = ' ' ;
      		//n_s = s[i] ;
      		}

   	i++ ;
  		}
		Tmp = Tmp.Trim()  ;
		NazwaPliku =	Tmp ;
		Test->Text = Tmp ;
 	//RozmiarPliku := StrToInt(Copy(Wiadomosc , 5 , Pos(';' , Wiadomosc) - 5)) ;
 	//NazwaPliku := Copy(Wiadomosc , Pos(';' , Wiadomosc) + 1 , Length(Wiadomosc) - Pos(';' , Wiadomosc)) ;
 	SaveDlg->FileName = NazwaPliku ;
 	if(  Application->MessageBox("Czy chcesz pobrać plik ",
 	"Pobieranie pliku", MB_YESNO) && (SaveDlg->Execute() ) )
 	{
   	F = new TFileStream(SaveDlg->FileName , fmCreate) ;
   	OdbierzPlik = true ;
   	StatBar->SimpleText = "Odbieram plik" ;
   	Serwer->Socket->Connections[serwer->Socket->ActiveConnections - 1]->SendText("/m:y") ;
   	BtnWyslijPlik->Enabled = false ;
 	}
 	else Serwer->Socket->Connections[serwer->Socket->ActiveConnections - 1]->SendText("/m:n") ;
}
else
{
 	Wiadomosc.Delete(1, 4) ; //Delete(Wiadomosc , 1 , 4) ;
 	ROdebrane->Lines->Add(Wiadomosc) ;
 	SendMessage(ROdebrane->Handle , WM_VSCROLL , SB_BOTTOM , 0) ;
}
 }
}

Po stronie Klienta :

void __fastcall TForm1::KlientRead(TObject *Sender,
 	TCustomWinSocket *Socket)
{
int Odczytane ;
char  Buf[1024] ;
String Wiadomosc, Tmp ;
String  NazwaPliku ;
 if ( OdbierzPlik )
 {
Odczytane = Socket->ReceiveBuf(Buf , sizeof(Buf)) ;
Wiadomosc = Buf ;
if ( Wiadomosc.Pos("/m:m")  == 1 )
{
 	Wiadomosc.Delete(1 , 4) ;
 	//ROdebrane->Lines->Add(Wiadomosc) ;
 	//ROdebrane->Lines->Add(StrPas(PChar(Wiadomosc))) ;
 	SendMessage(ROdebrane->Handle , WM_VSCROLL , SB_BOTTOM , 0) ;
 	return ;
}
StatBar->SimpleText = "Odbieram plik, postęp: " + FormatFloat("0.00" , (F->Position / RozmiarPliku) * 100) + "%" ;
F->Write(Buf , Odczytane) ;
if ( F->Position >= RozmiarPliku )
{
 	F->Free() ;
 	StatBar->SimpleText = "Przesyłanie zakończone sukcesem." ;
 	OdbierzPlik = false ;
 	BtnWyslijPlik->Enabled = true ;
}
 }
 else
 {
Wiadomosc = Socket->ReceiveText() ;
if ( Wiadomosc == "/m:y" )
{
 	WyslijPlik = true ;
 	while (F->Position < F->Size )
 	{
   	Application->ProcessMessages() ;
   	if ( !WyslijPlik ) break ;
   	Sleep(10) ;
   	Odczytane = F->Read(Buf , sizeof(Buf)) ;
   	Klient->Socket->SendBuf(Buf , Odczytane) ;
   	StatBar->SimpleText = "Przesyłam plik, postęp: " + FormatFloat("0.00" , (F->Position / F->Size) * 100) + "%" ;
 	}
 	if ( F->Position < F->Size ) StatBar->SimpleText = "Wysyłanie pliku przerwane."  ;
 	else BtnWyslijPlik->Enabled = true ;
 	WyslijPlik = false ;
 	F->Free() ;
}
else if ( Wiadomosc == "/m:n" )
{
 	StatBar->SimpleText = "Użytkownik nie chce odebrać pliku->" ;
 	BtnWyslijPlik->Enabled = true ;
 	F->Free() ;
}
else if ( Wiadomosc.Pos("/m:p" ) == 1 )
{
int len, i=1;
  	Tmp = Wiadomosc  ;
  	len = Wiadomosc.Length() ;
   	while(len--)
   	{
           	if(i <= 5 || i >= Tmp.Pos(";") )
           	Tmp[i] = ' ' ;
           	i++ ;
   	}
   	Tmp = Tmp.Trim()  ;
  	//len = StrToInt(n_s) ;
   	Test->Text = Tmp ; //n_s ;
  	//Tmp = Wiadomosc ;
  	//Tmp.Delete(5, Wiadomosc.Pos(";")-5) ;
  	RozmiarPliku = StrToInt(Tmp) ;
  	i=1;
   	Tmp = Wiadomosc ;
   	len = Wiadomosc.Length() ;
   	while(len--)
   	{
   	if( i <= Tmp.Pos(";") )
   	{
      		Tmp[i] = ' ' ;
      		//n_s = s[i] ;
      		}

   	i++ ;
  		}
		Tmp = Tmp.Trim()  ;
		NazwaPliku =	Tmp ;
		Test->Text = Tmp ;
 	//RozmiarPliku = StrToInt(Copy(Wiadomosc , 5 , Pos(";" , Wiadomosc) - 5)) ;
 	//NazwaPliku = Copy(Wiadomosc , Pos(";" , Wiadomosc) + 1 , Length(Wiadomosc) - Pos(";" , Wiadomosc)) ;
 	SaveDlg->FileName = NazwaPliku ;
 	if (  Application->MessageBox("Czy chcesz pobrać plik " ,
		"Pobieranie pliku", MB_YESNO)  && (SaveDlg->Execute() ) )
 	{
   	F = new TFileStream(SaveDlg->FileName , fmCreate) ;
   	OdbierzPlik = true ;
   	StatBar->SimpleText = "Odbieram plik" ;
   	Klient->Socket->SendText("/m:y") ;
   	BtnWyslijPlik->Enabled = false ;
 	}
 	else Klient->Socket->SendText("/m:n") ;
}
else
{
 	Wiadomosc.Delete(1 , 4) ;
 	ROdebrane->Lines->Add(Wiadomosc) ;
 	SendMessage(ROdebrane->Handle , WM_VSCROLL , SB_BOTTOM , 0) ;
}
 }
}

 

Tutaj link do źródła jeszcze :

http://www.sendspace.pl/file/ec7d31d523d00d6619f8db0

Z góry dziękuje za pomoc

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...