首先你需要有一个FTP服务器和用户名密码,然后你可以参考下面的一个基本的C语言用于FTP上传的程序。
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
int main()
{
WSADATA wsaData;
SOCKET hSocket;
SOCKADDR_IN sockAddr;
FILE *fp;
long filelen;
char *buffer;
size_t result;
WSAStartup(MAKEWORD(2, 2), &wsaData);
hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
memset(&sockAddr, 0, sizeof(sockAddr));
sockAddr.sin_family = AF_INET;
sockAddr.sin_port = htons(21);
sockAddr.sin_addr.S_un.S_addr = inet_addr("你的服务器地址");
connect(hSocket, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));
send(hSocket, "USER 你的用户名rn", strlen("USER 你的用户名rn"), 0);
send(hSocket, "PASS 你的密码rn", strlen("PASS 你的密码rn"), 0);
send(hSocket, "PASVrn", strlen("PASVrn"), 0);
send(hSocket, "STOR 上传的文件名rn", strlen("STOR 上传的文件名rn"), 0);
send(hSocket, "RETR 你的文件rn", strlen("RETR 文件名rn"), 0);
fp = fopen("你的文件路径", "rb");
fseek(fp, 0, SEEK_END);
filelen = ftell(fp);
rewind(fp);
buffer = (char*)malloc(sizeof(char)*filelen);
result = fread(buffer, 1, filelen, fp);
if (result != filelen) {
printf("读取文件出错n");
exit(-1);
}
send(hSocket, buffer, filelen, 0);
closesocket(hSocket);
WSACleanup();
return 0;
}
这段代码首先初始化WSA,然后创建一个TCP的socket,然后连接到FTP服务器,发送用户名和密码以及PASV命令进入被动模式。然后,打开一个本地的文件,读取文件的内容,然后通过FTP的STOR命令上传文件到服务器。
注意这段代码非常基础,没有错误处理,也没有处理服务器的回应,只是作为一个基本示例程序。在实际的程序中,你需要处理各种可能出现的错误情况。这段代码也没有处理PASV模式下服务器返回的端口号,你需要从服务器回应中解析出端口号,然后新建一个socket连接到那个端口。
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/174663.html