- °³¿ä
- ¼³Ä¡
- C++ Builder 2006
- C++ Builder 6
- FTP Server
- ±âº»ÀûÀÎ µ¿ÀÛ
- Á¢¼ÓÇÑ Å¬¶óÀÌ¾ðÆ® Á¦¾î
- ¸µÅ©
1 °³¿ä
HTTP Ŭ¶óÀ̾ðÆ®/¼¹ö, FTP Ŭ¶óÀ̾ðÆ®/¼¹ö, ÅÚ³Ý Å¬¶óÀÌ¾ðÆ® µîµîÀÇ ±â´ÉÀÌ Æ÷ÇԵǾî ÀÖ´Â ¿ÀÇ ¼Ò½º ¶óÀ̺귯¸®´Ù. ¸Å´º¾óÀÌ ¾ø´Â µ¥´Ù°¡ ±â´Éµµ ¾à°£ ºÎ½ÇÇϳª, FTP ¼¹ö ±â´ÉÀÌ ÀÖ´Â °ø°³ ÄÄÆ÷³ÍÆ®°¡ ÀÌ°Í ¹Û¿¡ ¾øÀ¸¹Ç·Î °Á ¾²ÀÚ. Indy ÄÄÆ÷³ÍÆ®¿¡µµ FTP ¼¹ö ±â´ÉÀÌ ÀÖ´Â °Í °°±â´Â ÇÏ´øµ¥, ¹º°¡ ¼³Ä¡°¡ ºý¼¾ °ü°è·Î ÆÐ½º.
2 ¼³Ä¡
2.1 C++ Builder 2006
- ¹èÆ÷º»À» ´Ù¿î·Îµå¹Þ¾Æ, Àû´çÇÑ °÷¿¡´Ù ¾ÐÃàÀ» Ǭ´Ù. ÀÌ µð·ºÅ丮¸¦ $(ICS)¶ó°í ÇÏÀÚ.
- $(ICS)\Delphi\Vc32 µð·ºÅ丮ÀÇ icsbcb100.bdsproj ÆÄÀÏÀ» ¿¬´Ù.
- ÇÁ·ÎÁ§Æ® ¸Å´ÏÀú¿¡¼ ÀνºÅç ¸Þ´º¸¦ ¼±ÅÃÇϸé, icslogger.obj ÆÄÀÏÀ» ãÀ» ¼ö ¾ø´Ù°í ¿¡·¯¸¦ ÅäÇϴµ¥, $(ICS)\Delphi\Vc32\Debug_Build ¶Ç´Â $(ICS)\Delphi\Vc32\Debug_Build µð·ºÅ丮¿¡ °¡º¸¸é ÇØ´çÇÏ´Â ¿ÀºêÁ§Æ® ÆÄÀÏÀÌ ÀÖ´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ±ÍÂúÀ¸´Ï ¿©±â¿¡ Á¸ÀçÇÏ´Â ¸ðµç obj ÆÄÀϵéÀ» $(ICS)\Delphi\Vc32 µð·ºÅ丮¿¡´Ù º¹»çÇÑ´Ù.
- ´Ù½Ã Çѹø ÀνºÅçÇÑ´Ù.
- ÆÄ½ºÄ® ÄÄÆÄÀÏ·¯ ¿É¼ÇÀ¸·Î °¡¼ $(ICS)\Delphi\Vc32 µð·ºÅ丮¸¦ ¶óÀ̺귯¸® ÆÐ½º·Î µî·ÏÇØÁØ´Ù.
- C++ ºô´õ ÄÄÆÄÀÏ·¯ ¿É¼ÇÀ¸·Î °¡¼ $(ICS)\Delphi\Vc32 µð·ºÅ丮¸¦ ¶óÀ̺귯¸® ÆÐ½º·Î µî·ÏÇØÁØ´Ù.
2.2 C++ Builder 6
- ¹èÆ÷º»À» ´Ù¿î·Îµå¹Þ¾Æ, Àû´çÇÑ °÷¿¡´Ù ¾ÐÃàÀ» Ǭ´Ù. ÀÌ µð·ºÅ丮¸¦ $(ICS)¶ó°í ÇÏÀÚ.
- Tools -> Environment Options -> Library Ç׸ñÀ¸·Î °¡¼ Library Path¿¡´Ù $(ICS)\Delphi\Vc32 µð·ºÅ丮¸¦ µî·ÏÇØÁØ´Ù.
- $(ICS)\Delphi\Vc32 µð·ºÅ丮ÀÇ File > Open Project ¸Þ´º¸¦ ÅëÇØ icsbcb60.bpk ÆÄÀÏÀ» ¿¬´Ù.
- $(ICS)\Delphi\Vc32\ZOBJ123 µð·ºÅ丮ÀÇ obj ÆÄÀϵéÀ» $(ICS)\Delphi\Vc32 µð·ºÅ丮·Î º¹»çÇÑ´Ù.
- ÇÁ·ÎÁ§Æ® ¸Å´ÏÀú¿¡¼ ÀνºÅçÇÑ´Ù. ¿¡·¯°¡ Çѹø ³ª´Âµ¥, ¹«½ÃÇϰí Çѹø ´õ ÀνºÅçÀ» ´©¸£¸é ¿ØÁö ÀνºÅçÀÌ µÈ´Ù. -_-;
3 FTP Server
FtpServer->Start();
¼¹ö ÁßÁö
FtpServer->Stop();
FtpServer->DisconnectAll();
3.2 Á¢¼ÓÇÑ Å¬¶óÀÌ¾ðÆ® Á¦¾î
Á¢¼ÓÇÑ Å¬¶óÀÌ¾ðÆ®¿¡ ´ëÇÑ Á¦¾î´Â TFtpCtrlSocket Ŭ·¡½º¸¦ ÅëÇØ ÀÌ·ç¾îÁø´Ù. TFtpServerÀÇ À̺¥Æ® Çڵ鷯¸¦ º¸¸é ´ëºÎºÐ TFtpCtrlSocket Ŭ·¡½º°¡ ÀÎÀÚ·Î ³Ñ¾î¿ÈÀ» ¾Ë ¼ö ÀÖ´Ù.
ÀÎÁõ ó¸® ¹× Ȩ µð·ºÅ丮 ÁöÁ¤
void __fastcall TMainForm::FtpServerAuthenticate(TObject *Sender,
TFtpCtrlSocket *Client, TFtpString &UserName, TFtpString &Password,
bool &Authenticated)
{
if (AnsiString(UserName) == "ValidUser" && AnsiString(Password) == "ValidPass")
{
Client->HomeDir = "D:\\";
Authenticated = true;
}
else
{
Authenticated = false;
}
}
TFtpCtrlSocket ¸â¹ö
public:
bool BinaryMode;
AnsiString DataAddr;
AnsiString DataPort;
AnsiString FileName;
AnsiString FilePath;
bool DataSessionActive;
Classes::TStream* DataStream;
bool HasOpenedFile;
AnsiString TransferError;
bool DataSent;
Byte CurCmdType;
__int64 ByteCount;
__int64 RestartPos;
AnsiString FromFileName;
AnsiString ToFileName;
bool PassiveMode;
bool PassiveStart;
bool PassiveConnected;
TFtpOptions Options;
virtual void __fastcall Dup(int newHSocket);
virtual void __fastcall StartConnection(void);
void __fastcall SendAnswer(AnsiString Answer);
virtual void __fastcall SetDirectory(AnsiString newValue);
void __fastcall SetAbortingTransfer(bool newValue);
virtual AnsiString __fastcall GetPeerAddr();
__property Wsocket::TWSocket* DataSocket = {read=FDataSocket};
__property System::TDateTime ConnectedSince = {read=FConnectedSince};
__property System::TDateTime LastCommand = {read=FLastCommand};
__property int CommandCount = {read=FCommandCount, nodefault};
__property char * RcvBuf = {read=FRcvBuf};
__property RcvdCount ;
__property bool CloseRequest = {read=FCloseRequest, write=FCloseRequest, nodefault};
__property AnsiString Directory = {read=FDirectory, write=SetDirectory};
__property AnsiString HomeDir = {read=FHomeDir, write=FHomeDir};
__property bool AbortingTransfer = {read=FAbortingTransfer, write=SetAbortingTransfer, nodefault};
__property int ID = {read=FID, write=FID, nodefault};
__published:
__property TFtpCtrlState FtpState = {read=FFtpState, write=FFtpState, nodefault};
__property AnsiString Banner = {read=FBanner, write=FBanner};
__property int RcvSize = {read=FRcvSize, write=SetRcvSize, nodefault};
__property bool Busy = {read=FBusy, write=FBusy, nodefault};
__property AnsiString UserName = {read=FUserName, write=FUserName};
__property AnsiString PassWord = {read=FPassWord, write=FPassWord};
__property int UserData = {read=FUserData, write=FUserData, nodefault};
__property TDisplayEvent OnDisplay = {read=FOnDisplay, write=FOnDisplay};
__property TCommandEvent OnCommand = {read=FOnCommand, write=FOnCommand};
__property OnSessionClosed ;
__property OnDataSent ;
__property HSocket ;
__property AllSent ;
__property State ;
__property IcsLogger ;
4 ¸µÅ©
SeriousMoin v1 (koMoinMoin 1.0a4 Modified)