Ĺadny brzuch
Witam wszytkich.
Potrzebuję pomocy w napisaniu programu SERWER FTP z watkami, kontrola praw użytkowników, plików itd. Nie mam zielonego pojęcia jak się zabrać za coś takiego. Napisałem Klienta i działa bez problemu, natomiast nie moge nic zacząc jeśli chodzi o serwer. Wszytko pisałem w Builder C++. Proze o pomoc : materiały bądź źródło.
Pisałeś na komponentach jak się domyślam... ciężko Ci będzie, jeśli mam rację :unsure:
Możesz zawsze looknąć w źródełka Indy ;) Znasz Winsock?
http://www.faqs.org/rfcs/rfc959.html - ang. opis protokołu ftp ;)
Użytkownik Cyrkiel edytował ten post 18 wrzesień 2005, 15:04
Pisałeś na komponentach jak się domyślam... ciężko Ci będzie, jeśli mam rację :unsure:
Możesz zawsze looknąć w źródełka Indy ;) Znasz Winsock?
http://www.faqs.org/rfcs/rfc959.html - ang. opis protokołu ftp ;)
Witam ponownie.
Pobrałem ze strony 3miasta kod programu serwera. Niestety serwer wysyła tylko tekst. czy mógłby ktoś na to zerknąć i spróbować cos z tym zrobić, aby wysyłane były normalne pliki?? Ewentualnie jakies materiały jak coś takiego wykonac?? Wszystko w C++ Builder.
LOG.CPP
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <windows.h> #include <wininet.h> #include <winsock2.h> #include "log.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Button1->Enabled=false; const unsigned int port=1025; WORD wVersionRequested; SOCKET sock,connSock; struct sockaddr_in addr; struct hostent *myHost; WSADATA wsaData; int err; char name[80]; char bufor[1024]; wVersionRequested = MAKEWORD( 2, 0 ); // jakiej wersji biblioteki wymagamy err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ){ Application->MessageBox("Inicjalizacja biblioteki WinSock nie powiodła się !!! Skontaktuj się ze sprzedawcą systemu operacyjnego w celu zainstalowania biblioteki WinSock","Project 1",MB_OK ); Button1->Enabled=true; return; } Memo1->Lines->Add(wsaData.szDescription); sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(sock==INVALID_SOCKET) { Memo1->Lines->Add("Error creating socket"); Memo1->Lines->Add(WSAGetLastError()); Button1->Enabled=true; WSACleanup(); } Memo1->Lines->Add("Socket created :"); Memo1->Lines->Add(sock); addr.sin_family=AF_INET; addr.sin_port=htons(port); gethostname(name,80); Memo1->Lines->Add("Server name:"); Memo1->Lines->Add(name); myHost=gethostbyname(name); memcpy(&(addr.sin_addr.s_addr),myHost->h_addr,sizeof(in_addr)); if(bind(sock,(SOCKADDR *)&addr,sizeof(sockaddr))!=0){ Memo1->Lines->Add("Wystąpił błąd.\r\nOpis błędu :"); err=WSAGetLastError(); switch(err){ case WSANOTINITIALISED: Memo1->Lines->Add("A successful WSAStartup must occur before using this function."); break; case WSAENETDOWN: Memo1->Lines->Add("the network subsystem has failed."); break; case WSAEADDRINUSE: Memo1->Lines->Add("The specified address is already in use."); break; case WSAEFAULT: Memo1->Lines->Add("The name or the namelen argument is not a valid part of the user address space, the namelen argument is too small, the name argument contains incorrect address format for the associated address family, or the first two bytes of the memory block specified by name does not match the address family associated with the socket descriptor s."); break; case WSAEINPROGRESS: Memo1->Lines->Add("A blocking Windows Sockets 1.1 call is in progress, or the service provider is still processing a callback function."); break; case WSAEINVAL: Memo1->Lines->Add("The socket is already bound to an address."); break; case WSAENOBUFS: Memo1->Lines->Add("Not enough buffers available, too many connections."); break; case WSAENOTSOCK: Memo1->Lines->Add("The descriptor is not a socket."); break; default: Memo1->Lines->Add("Nieznany błąd numer:"); Memo1->Lines->Add(WSAGetLastError()); break; } WSACleanup( ); Memo1->Lines->Add("Clean up !!!"); Button1->Enabled=true; return; } if(listen(sock,4)!=0) { Memo1->Lines->Add("Wystąpił błąd.\r\nOpis błędu :"); err=WSAGetLastError(); WSACleanup( ); Memo1->Lines->Add("Clean up !!!"); Button1->Enabled=true; return; } Memo1->Lines->Add("Server started\r\nListening on port 1025"); connSock=accept(sock,NULL,NULL); Memo1->Lines->Add("Receving data..."); recv(connSock,bufor,1024,MSG_PEEK ); closesocket(sock); closesocket(connSock); WSACleanup( ); Memo1->Lines->Add("WSA cleaned up !!!"); Memo1->Lines->Add("Received data :"); Memo1->Lines->Add(bufor); Memo1->Lines->Add("\r\nServer stopped"); Button1->Enabled=true; return; } //---------------------------------------------------------------------
LOGOFF.CPP
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop USERES("logoff.res"); USEFORM("log.cpp", Form1); //--------------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->Title = "TCP Server"; Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0; } //---------------------------------------------------------------------------
LOG.H
#define logH //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TButton *Button1; TLabel *Label1; TMemo *Memo1; TLabel *Label2; void __fastcall Button1Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Potrzebuję pomocy w napisaniu programu SERWER FTP z watkami, kontrola praw użytkowników, plików itd. Nie mam zielonego pojęcia jak się zabrać za coś takiego. Napisałem Klienta i działa bez problemu, natomiast nie moge nic zacząc jeśli chodzi o serwer. Wszytko pisałem w Builder C++. Proze o pomoc : materiały bądź źródło.
Pisałeś na komponentach jak się domyślam... ciężko Ci będzie, jeśli mam rację :unsure:
Możesz zawsze looknąć w źródełka Indy ;) Znasz Winsock?
http://www.faqs.org/rfcs/rfc959.html - ang. opis protokołu ftp ;)
Użytkownik Cyrkiel edytował ten post 18 wrzesień 2005, 15:04
Pisałeś na komponentach jak się domyślam... ciężko Ci będzie, jeśli mam rację :unsure:
Możesz zawsze looknąć w źródełka Indy ;) Znasz Winsock?
http://www.faqs.org/rfcs/rfc959.html - ang. opis protokołu ftp ;)

Witam ponownie.
Pobrałem ze strony 3miasta kod programu serwera. Niestety serwer wysyła tylko tekst. czy mógłby ktoś na to zerknąć i spróbować cos z tym zrobić, aby wysyłane były normalne pliki?? Ewentualnie jakies materiały jak coś takiego wykonac?? Wszystko w C++ Builder.
LOG.CPP
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <windows.h> #include <wininet.h> #include <winsock2.h> #include "log.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Button1->Enabled=false; const unsigned int port=1025; WORD wVersionRequested; SOCKET sock,connSock; struct sockaddr_in addr; struct hostent *myHost; WSADATA wsaData; int err; char name[80]; char bufor[1024]; wVersionRequested = MAKEWORD( 2, 0 ); // jakiej wersji biblioteki wymagamy err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ){ Application->MessageBox("Inicjalizacja biblioteki WinSock nie powiodła się !!! Skontaktuj się ze sprzedawcą systemu operacyjnego w celu zainstalowania biblioteki WinSock","Project 1",MB_OK ); Button1->Enabled=true; return; } Memo1->Lines->Add(wsaData.szDescription); sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(sock==INVALID_SOCKET) { Memo1->Lines->Add("Error creating socket"); Memo1->Lines->Add(WSAGetLastError()); Button1->Enabled=true; WSACleanup(); } Memo1->Lines->Add("Socket created :"); Memo1->Lines->Add(sock); addr.sin_family=AF_INET; addr.sin_port=htons(port); gethostname(name,80); Memo1->Lines->Add("Server name:"); Memo1->Lines->Add(name); myHost=gethostbyname(name); memcpy(&(addr.sin_addr.s_addr),myHost->h_addr,sizeof(in_addr)); if(bind(sock,(SOCKADDR *)&addr,sizeof(sockaddr))!=0){ Memo1->Lines->Add("Wystąpił błąd.\r\nOpis błędu :"); err=WSAGetLastError(); switch(err){ case WSANOTINITIALISED: Memo1->Lines->Add("A successful WSAStartup must occur before using this function."); break; case WSAENETDOWN: Memo1->Lines->Add("the network subsystem has failed."); break; case WSAEADDRINUSE: Memo1->Lines->Add("The specified address is already in use."); break; case WSAEFAULT: Memo1->Lines->Add("The name or the namelen argument is not a valid part of the user address space, the namelen argument is too small, the name argument contains incorrect address format for the associated address family, or the first two bytes of the memory block specified by name does not match the address family associated with the socket descriptor s."); break; case WSAEINPROGRESS: Memo1->Lines->Add("A blocking Windows Sockets 1.1 call is in progress, or the service provider is still processing a callback function."); break; case WSAEINVAL: Memo1->Lines->Add("The socket is already bound to an address."); break; case WSAENOBUFS: Memo1->Lines->Add("Not enough buffers available, too many connections."); break; case WSAENOTSOCK: Memo1->Lines->Add("The descriptor is not a socket."); break; default: Memo1->Lines->Add("Nieznany błąd numer:"); Memo1->Lines->Add(WSAGetLastError()); break; } WSACleanup( ); Memo1->Lines->Add("Clean up !!!"); Button1->Enabled=true; return; } if(listen(sock,4)!=0) { Memo1->Lines->Add("Wystąpił błąd.\r\nOpis błędu :"); err=WSAGetLastError(); WSACleanup( ); Memo1->Lines->Add("Clean up !!!"); Button1->Enabled=true; return; } Memo1->Lines->Add("Server started\r\nListening on port 1025"); connSock=accept(sock,NULL,NULL); Memo1->Lines->Add("Receving data..."); recv(connSock,bufor,1024,MSG_PEEK ); closesocket(sock); closesocket(connSock); WSACleanup( ); Memo1->Lines->Add("WSA cleaned up !!!"); Memo1->Lines->Add("Received data :"); Memo1->Lines->Add(bufor); Memo1->Lines->Add("\r\nServer stopped"); Button1->Enabled=true; return; } //---------------------------------------------------------------------
LOGOFF.CPP
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop USERES("logoff.res"); USEFORM("log.cpp", Form1); //--------------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->Title = "TCP Server"; Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0; } //---------------------------------------------------------------------------
LOG.H
#define logH //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TButton *Button1; TLabel *Label1; TMemo *Memo1; TLabel *Label2; void __fastcall Button1Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif