p=strtok(read_buf,",");
//printf("%s\n",p);
p=strtok(NULL,",");
p=strtok(NULL,",");
p=strtok(NULL,",");
p=strtok(NULL,",");
//printf("%s\n",p);
s=strtok(NULL,")");
//printf("%s\n",s);
/*字符串转换成整数*/
p1=atoi(p);
p2=atoi(s);
data_sock=p1*256+p2;
//printf("%d\n",data_sock);
down();
}
down.c
[cpp]
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define SERV_IP "127.0.0.1"
#define SERV_PORT 21
char read_buf[100];
char send_buf[100];
int control_sock,data_sock,n;
void down()
{
/* 连接服务器新开的数据端口 */
struct sockaddr_in servaddr;
bzero(read_buf,sizeof(read_buf));
bzero(send_buf,sizeof(send_buf));
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
inet_pton(AF_INET,SERV_IP,&servaddr.sin_addr);
servaddr.sin_port = htons(data_sock);
data_sock = socket(AF_INET, SOCK_STREAM, 0);
connect(data_sock,(struct sockaddr *)&servaddr, sizeof(servaddr));
// printf("%d\n",data_sock);
/* 命令 ”CWD dirname\r\n” */
strcpy(send_buf,"CWD /home/sunmeng/zhongbei/FTP\r\n");
/* 客户端发送命令改变工作目录 */
n=write(control_sock, send_buf, strlen(send_buf));
if(n<0)
{
perror("write error");
exit(1);
}
/* 客户端接收服务器的响应码和信息,正常为 ”250 Command okay.” */
n=read(control_sock, read_buf, sizeof(read_buf));
if(n<0)
{
perror("read error");
exit(1);
}
printf("%s\n",read_buf);
/* 命令 ”SIZE filename\r\n” */
bzero(read_buf,sizeof(read_buf));
bzero(send_buf,sizeof(send_buf));
strcpy(send_buf,"SIZE ge.mp3\r\n");
/* 客户端发送命令从服务器端得到下载文件的大小 */
n=write(control_sock, send_buf, strlen(send_buf));
if(n<0)
{
perror("write error");
exit(1);
}
/* 客户端接收服务器的响应码和信息,正常为 ”213
n=read(control_sock, read_buf, sizeof(read_buf));
if(n<0)
{
perror("read error");
exit(1);
}
printf("%s\n",read_buf);
/* 命令 ”RETR filename\r\n” */
bzero(read_buf,sizeof(read_buf));
bzero(send_buf,sizeof(send_buf));
strcpy(send_buf,"RETR ge.mp3\r\n");
/* 客户端发送命令从服务器端下载文件 */
n=write(control_sock, send_buf, strlen(send_buf));
if(n<0)
{
perror("write error");
exit(1);
}
/* 客户端接收服务器的响应码和信息,正常为 ”150 Opening data connection.” */
//printf("%d\n",data_sock);
/*read阻塞 只有匿名用户才能下载*/
n=read(control_sock, read_buf, sizeof(read_buf));
if(n<0)
{
perror("read error");
exit(1);
}
printf("%s\n",read_buf);
/* 客户端创建文件 */
int file=1;;
n = open("gequ.mp3", O_RDWR|O_CREAT, 0666);
while(file>0) {
/* 客户端通过数据连接 从服务器接收文件内容 */
bzero(read_buf,sizeof(read_buf));
file =read(data_sock, read_buf, sizeof(read_buf));
if(file<0)
{
perror("create file error");
exit(1);
}
/* 客户端写文件 */
file = write(n, read_buf, strlen(read_buf));
if(file<0)
{
perror("write error");
exit(1);
}
}
/* 客户端关闭文件 */
close(n);
}