这是一个简易版的ftp工具,主要实现的功能有ls、pwd、exit、help、put、get。
实例图哦:
下边是代码:
server.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <dirent.h>
#include <fcntl.h>
#define NUM 100
#define PORT 8000
int command_ls(int cli_sockfd);
int command_pwd(int cli_sockfd);
int command_get(int cli_sockfd, char *filename);
int command_put(int cli_sockfd, char *filename);
int main(int argc, char *argv[])
{
int ser_sockfd = 0;
int cli_sockfd = 0;
struct sockaddr_in ser_addr, cli_addr;
int ser_len = 0;
int cli_len = 0;
char command[NUM];
char buffer[NUM];
bzero(buffer, NUM);
bzero(command, NUM);
if((ser_sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){
perror("socket error!");
return -1;
}
bzero(&ser_addr, sizeof(ser_addr));
ser_addr.sin_family = AF_INET;
ser_addr.sin_addr.s_addr = htonl(INADDR_ANY);
ser_addr.sin_port = htons(PORT);
ser_len = sizeof(ser_addr);
if((bind(ser_sockfd, (struct sockaddr *)&ser_addr, ser_len)) < 0){
perror("bind error!");
return -1;
}
if(listen(ser_sockfd, 5) < 0){
perror("listen error!");
return -1;
}
cli_len = sizeof(cli_addr);
bzero(&cli_addr, sizeof(cli_len));
while(1){
if((cli_sockfd = accept(ser_sockfd, (struct sockaddr *)&cli_addr, &cli_len)) < 0){
perror("accept error!");
return -1;
}
if(read(cli_sockfd, command, NUM) < 0){
perror("read error!");
return -1;
}
printf("command is :%s\n", command);
if(strncm