See the samples below, useful :http://www.codeproject.com/internet/ftpwanderer.asp http://www.codeproject.com/internet/FTPServer.asp
Thank U very much! But either of these two programs is not use winsock directly! The first use WinInet, and the second use CSocket class! I just want program with winsock!!
there are some documents about ftp.ftp://ftp.rfc-editor.org/in-notes/
here's some sample code, maybe U can find something useful in it!login(char *ip,char *user,char *pass) { ...
http://www.codeproject.com/internet/FTPServer.asp
But either of these two programs is not use winsock directly!
The first use WinInet, and the second use CSocket class! I just want program with winsock!!
{
...
WSAStartup(MAKEWORD(2,2), &wsaData);
handle = socket(AF_INET,SOCK_STREAM,0);
memset(&server,0,sizeof(server));
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr(ip);
server.sin_port = htons(21); connect(handle,(struct sockaddr *)&server,sizeof(struct sockaddr)); setsockopt(handle,SOL_SOCKET,SO_LINGER,0,0);
setsockopt(handle,SOL_SOCKET,SO_REUSEADDR,0,0);
setsockopt(handle,SOL_SOCKET,SO_KEEPALIVE,0,0); len = 0;
count = 3;
memset(buffer, 0, sizeof(buffer));
while(count >= 0)
{
len = recv(handle, buffer, sizeof(buffer),0);
if(len >= 0)
break;
len = 0;
count--;
}
buffer[len] = '\0';
if((strstr(buffer,"220") == NULL) || (strstr(buffer,"ready") == NULL))
{
sprintf(szErrorInfo,"与服务器连接失败: %d", WSAGetLastError());
logout(handle);
return FALSE;
}
//用户名
sprintf(buffer,"USER %s\r\n",user);
send(handle,buffer,strlen(buffer),0);
len = 0;
count = 3;
memset(buffer, 0, sizeof(buffer));
while(count >= 0)
{
len = recv(handle, buffer, sizeof(buffer),0);
if(len >= 0)
break;
len = 0;
count--;
}
buffer[len] = '\0';
if((strstr(buffer,"331") == NULL) || (strstr(buffer,"required for") == NULL))
{
sprintf(szErrorInfo,"用户名错误: %d", WSAGetLastError());
logout(handle);
return FALSE;
}
//口令
sprintf(buffer,"PASS %s\r\n",pass);
send(handle,buffer,strlen(buffer),0);
len = 0;
count = 3;
memset(buffer, 0, sizeof(buffer));
while(count >= 0)
{
len = recv(handle, buffer, sizeof(buffer),0);
if(len >= 0)
break;
len = 0;
count--;
}
buffer[len] = '\0';
if((strstr(buffer,"230") == NULL) || (strstr(buffer,"logged in") == NULL))
{
sprintf(szErrorInfo,"用户名或口令错误: %d", WSAGetLastError());
logout(handle);
return FALSE;
}
logout(handle);
return TRUE;
}