char msg[]= "220 Service ready for new user.\r\n";
char data_buff[1000];
char read_buff[1000];
int len = strlen(msg);
if(pid==0) {
printf("main\n");
//客户端连接后,服务器先主动发送200 Service ready
if (send(connection, msg, len,0) < 0) {
perror("send");
close(connection);
return -1;
}
while(1){
//初始化读取buffer和发送buffer
memset(data_buff,0,sizeof(data_buff));
memset(read_buff,0,sizeof(read_buff));
//等待客户端发送指令
int recvbuff = recv(connection,read_buff,sizeof(read_buff),0);
if(recvbuff<1) {
return -1;
}
if(recvbuff==sizeof(read_buff)) {
return -2;
}
printf("Received:%s\n",read_buff);
//不做用户检测,一律认为是匿名用户,请求发送密码
if (send(connection, "331 Anonymous login okay, send your complete email as your password.\r\n", sizeof("331 Anonymous login okay, send your complete email as your password.\r\n"),0) < 0) {
原想能在网上搜索到诸多详细的教程,不过搜索后才看到到处都是教如何搭建ftp服务器的,开发的很少,开发之后能够像真正的ftp服务器一样使用的就更少了。与开发相关的更多是理论阐释,代码分析较少。有些是自己的ftp服务器和自己的ftp客户端通信没有问题,但不能用主流的ftp客户端(如FileZilla)获取文件,这显然不是我想要的结果。有些是用Java或C#等其他语言实现的,还是希望能够用C语言实现出来。
在网上搜到一个tinyftp,确实能用,于是决定对其肢解,一步一步拼接出一个ftp服务器。关于ftp协议的理论知识可以自行搜索,这里不再复制了。
大多数时候,我们知道起点,也知道终点,但却不知道中间的路怎么走。
我很喜欢《自己动手写操作系统》这本书:)
这里一步一步实现,今天先实现第一步,搭建框架。这是C语言实现TCP服务器的通行框架,废话少说,直接上代码。
开发语言:C语言
操作系统:LinuxDeepin 2013
调试客户端建议使用CuteFTP或者SmartFtp,FileZilla打印的信息不够多,用CuteFTP登陆该服务器可以看到如下信息:
看到客户端已经可以成功登陆了。