本版版主招募中

 
标题: 请问在c下如何用socket编写ftp客户端?
ppsscan1
LU新生
Rank: 1



UID 25334
精华 1
积分 4
帖子 4
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 10
注册 2004-7-28
 
发表于 2004-7-28 23:04  资料  个人空间  短消息  加为好友 
haha.gif
有例子程序吗?谢谢!

顶部
carol
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
幻想懒王++


UID 1859
精华 66
积分 5139
帖子 10006
活跃指数 32
LU金币 2596 个
LU金条 0 个
阅读权限 200
注册 2003-11-7
 
发表于 2004-7-28 23:34  资料  个人空间  短消息  加为好友 
ft 我也要 !!!!!!!!!!

windows 上 vb 用 winsock 开发的 telnet client 端 和 ftp server 程序!!!!! 谁有阿 mad.gif

顶部
99大话王 (gggg)
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
占③为王



LU爱心使者  
UID 260
精华 20
积分 925
帖子 1734
活跃指数 56
LU金币 4461 个
LU金条 4147 个
阅读权限 200
注册 2003-9-30
来自 未来世界
 
发表于 2004-7-29 11:26  资料  个人空间  短消息  加为好友 
了解FTP协议

socket连接connect到服务器(IP)端口(PORT)
发送send和接收recv数据并根据FTP协议解释





鸟枪换炮 换马甲鸟
顶部
无间道
LU幼天使
Rank: 2
流浪的野狗



UID 1041
精华 7
积分 143
帖子 257
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 20
注册 2003-10-27
 
发表于 2004-7-29 12:02  资料  个人空间  短消息  加为好友  添加 无间道 为MSN好友 通过MSN和 无间道 交谈
我有C代码的,要不要?





归去来兮,田园将芜胡不归!既自以心为形役,奚惆怅而独悲?悟已往之不谏,知来者之可追。实迷途其未远,觉今是而昨非。
顶部
carol
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
幻想懒王++


UID 1859
精华 66
积分 5139
帖子 10006
活跃指数 32
LU金币 2596 个
LU金条 0 个
阅读权限 200
注册 2003-11-7
 
发表于 2004-7-29 12:12  资料  个人空间  短消息  加为好友 
QUOTE(无间道 @ 2004-07-29 12:02:05)
我有C代码的,要不要?

blush.gif 好呀~~~~ 发我邮箱吧~ puccacarol@hotmail.com

顶部
wuhu
LU幼天使
Rank: 2



UID 209
精华 0
积分 61
帖子 121
活跃指数 2
LU金币 2014 个
LU金条 0 个
阅读权限 20
注册 2003-9-28
 
发表于 2004-7-29 13:04  资料  个人空间  短消息  加为好友 
我也要,jiangming888@163.com

顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
ppsscan1
LU新生
Rank: 1



UID 25334
精华 1
积分 4
帖子 4
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 10
注册 2004-7-28
 
发表于 2004-7-29 15:04  资料  个人空间  短消息  加为好友 
太感谢了!请发给我!ppsscan9@yahoo.com.cn

顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
omanx
LU新生
Rank: 1



UID 21627
精华 0
积分 16
帖子 31
活跃指数 0
LU金币 2007 个
LU金条 0 个
阅读权限 10
注册 2004-5-25
 
发表于 2004-7-29 17:20  资料  个人空间  短消息  加为好友  添加 omanx 为MSN好友 通过MSN和 omanx 交谈
俺也要一份,谢谢,congge8111@tom.com

顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
where
LU新生
Rank: 1



UID 7048
精华 0
积分 17
帖子 33
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 10
注册 2003-12-24
 
发表于 2004-7-29 17:56  资料  个人空间  短消息  加为好友 
多谢好人,给我一份吧 yz_temp@tom.com

顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
无间道
LU幼天使
Rank: 2
流浪的野狗



UID 1041
精华 7
积分 143
帖子 257
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 20
注册 2003-10-27
 
发表于 2004-7-30 08:43  资料  个人空间  短消息  加为好友  添加 无间道 为MSN好友 通过MSN和 无间道 交谈
我把它帖出来吧

#include <winsock.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "wininet.h"

#define MAX_ALLLEN 4096

int GetPort(char *buf,unsigned short&port);
int FtpFile(char *url,long& count);
int ChangeStr(char* buf)
{
int l = strlen(buf);
l--;
while(buf[l] == '\r' ||buf[l] == '\n' )
l--;
buf[l+1] = 0;
return 0;
}
/*
文件格式如:
ftp://22.108.33.3/5.rm
ftp://22.108.33.3/6.rm
...
*/
int main(int argc,char** argv)
{
FILE *fp;
fp = fopen(argv[1],"r");
if(fp == 0)
return -1;
char buf[1024];
char url[1024];
long num=0,count=0;
while(fgets(buf,1024,fp))
{
ChangeStr(buf);
if(strnicmp(buf,"ftp://",6) == 0)
{
strcpy(url,buf+2);
FtpFile(url,count);
num++;
printf("num = %ld,count =%ld",num,count);
}
}
fclose(fp);
return 0;
}

int FtpFile(char *url,long &count)
{
WSADATA cWSAData;
if(WSAStartup(MAKEWORD(2, 2), &cWSAData))
return -1;
char szServer[256];
char szPath[256];
char szUser[256];
char szPwd[256];
URL_COMPONENTS urlcom;
memset(&urlcom, 0, sizeof(URL_COMPONENTS));
urlcom.dwStructSize = sizeof(URL_COMPONENTS);
urlcom.lpszHostName = szServer;
urlcom.dwHostNameLength = 255;
urlcom.lpszUrlPath = szPath;
urlcom.dwUrlPathLength = 255;
urlcom.lpszUserName = szUser;
urlcom.dwUserNameLength = 255;
urlcom.lpszPassword = szPwd;
urlcom.dwPasswordLength = 255;
int ret = InternetCrackUrl(url, strlen(url), 0, &urlcom);
if(ret == FALSE)
return 1;

SOCKET comm_socket,data_socket;
struct sockaddr_in comm_addr,data_addr;
//将域名转换成IP;
PHOSTENT hp;
if ( !isdigit(szServer[0]) )
{
hp = gethostbyname(szServer);
if (hp == NULL )
return 1;
memset(&comm_addr,0,sizeof(sockaddr_in));
memcpy(&comm_addr.sin_addr,hp->h_addr,hp->h_length);
comm_addr.sin_family = hp->h_addrtype;
comm_addr.sin_port = htons(urlcom.nPort);
}
else
{
memset(&comm_addr,0,sizeof(sockaddr_in));
comm_addr.sin_addr.s_addr=inet_addr(szServer);
comm_addr.sin_family =AF_INET;
comm_addr.sin_port = htons(urlcom.nPort);
}


comm_socket = socket(AF_INET,SOCK_STREAM,0);



// setsockopt(comm_socket,SOL_SOCKET ,SO_RCVTIMEO,(char *)&nTimeOut,sizeof(nTimeOut));
// setsockopt(comm_socket,SOL_SOCKET ,SO_SNDTIMEO,(char *)&nTimeOut,sizeof(nTimeOut));

ret=connect(comm_socket,(struct sockaddr *)&comm_addr,sizeof(comm_addr));
if(ret == SOCKET_ERROR)
{
closesocket(comm_socket);
return 1;
}
char buf[MAX_ALLLEN];
char username[300];
char password[300];
char command[300];
memset(buf,0,MAX_ALLLEN);
memset(username,0,300);
memset(password,0,300);
memset(command,0,256);
if(urlcom.lpszUserName[0] != 0)
sprintf(username,"USER %s\r\n",urlcom.lpszUserName);
else
sprintf(username,"USER anonymous\r\n");
// if(urlcom.lpszPassword[0] != 0)
sprintf(password,"PASS %s\r\n",urlcom.lpszPassword);
// else
// sprintf(password,"PASS my@company.com\r\n");
send(comm_socket,username,strlen(username),0);
ret = recv(comm_socket,buf,100,0);
Sleep(1000);
if(!strstr(buf,"\r\n") || ret == 0)
{
closesocket(comm_socket);
return 1;
}
memset(buf,0,100);
send(comm_socket,password,strlen(password),0);
ret = recv(comm_socket,buf,100,0);
Sleep(1000);
if(!strstr(buf,"\r\n") || ret == 0)
{
closesocket(comm_socket);
return 1;
}
memset(buf,0,100);
send(comm_socket,"TYPE I\r\n",8,0);
ret = recv(comm_socket,buf,100,0);
Sleep(1000);
if(!strstr(buf,"\r\n") || ret == 0)
{
closesocket(comm_socket);
return 1;
}
memset(buf,0,100);
send(comm_socket,"PASV\r\n",6,0);
ret = recv(comm_socket,buf,100,0);
Sleep(1000);
if(!strstr(buf,"\r\n") || ret == 0)
{
closesocket(comm_socket);
return 1;
}
sprintf(command,"SIZE %s\r\n",szPath);
send(comm_socket,command,sizeof(command),0);
ret = recv(comm_socket,buf,100,0);
if(!strstr(buf,"\r\n") || ret == 0)
{
closesocket(comm_socket);
return 1;
}
count++;
return 0;
}

int GetPort(char* buf,unsigned short &port)
{
if(buf == NULL)
return -1;
unsigned short port1 = 0,port2 = 0;
char *p = NULL;
p = strchr(buf,'(');
if(p == NULL)
return -1;
int flag = 0;
while(*p)
{
if(*p == ',')
{
flag++;
if(flag == 4)
port1 = atoi(p+1);
else if(flag == 5)
{
port2 = atoi(p+1);
break;
}
}
p++;
}
if(*p && port1 && port2)
{
port = port1 << 8;
port += port2;
}
return 0;
}





归去来兮,田园将芜胡不归!既自以心为形役,奚惆怅而独悲?悟已往之不谏,知来者之可追。实迷途其未远,觉今是而昨非。
顶部
大漠孤星
管理员
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20


LU爱心使者  
UID 257
精华 24
积分 3097
帖子 4279
活跃指数 570
LU金币 2934 个
LU金条 422 个
阅读权限 255
注册 2003-9-30

用支付宝求购
 
发表于 2004-7-30 09:25  资料  个人空间  短消息  加为好友  添加 大漠孤星 为MSN好友 通过MSN和 大漠孤星 交谈 QQ
rose.gif 无间道不错啊~~


可惜是windows下的code.





顶部
wuhu
LU幼天使
Rank: 2



UID 209
精华 0
积分 61
帖子 121
活跃指数 2
LU金币 2014 个
LU金条 0 个
阅读权限 20
注册 2003-9-28
 
发表于 2004-7-30 10:18  资料  个人空间  短消息  加为好友 
修改修改,一定要修改成linux下的,

顶部
 



当前时区 GMT+8, 现在时间是 2008-10-16 12:10
乐悠LoveUnix论坛-京ICP备05005823号

Thanks to Discuz!  © 2001-2007    Power by LoveUnix.net
Processed in 0.057294 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - 乐悠LoveUnix - Archiver