CoLLeR Napisano Grudzień 16, 2012 Zgłoś Share Napisano Grudzień 16, 2012 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 More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.