基于Socket套接字的FTP服务简单实现

基于Socket套接字的FTP服务简单实现

文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UDP, 客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的, 而且是面向连接, 为数据传输提供可靠保证。

一、项目简介

1、利用套接字实现客户端和服务端的连接;
2、服务端和客户端可以互传文件;
3、客户端和服务端信息交互实现类似Linux系统下vi的快捷指令操作。

二、项目具体实现功能

1、客户端本地功能(xx代表文件或者文件夹名称):

  • 客户端查看当前文件路径:lpwd
  • 查看客户端当前目录下所有本地文件:lls
  • 客户端进入本地文件夹:lcd xx

2、客户端和服务端远程功能:

  • 客户端查看服务端的当前文件路径:pwd
  • 客户端查看服务端当前路径下所有文件:ls
  • 客户端进入服务端文件夹:cd xx
  • 客户端上传文件至服务端:upload xx
  • 客户端下载服务端文件到本地:download xx

三、代码实现

1、服务端代码实现:

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/stat.h>
#include <fcntl.h>

//宏定义相关端指令
#define QUIT      0
#define LS        1
#define PWD       2
#define LLS       3
#define LPWD      4
#define LCD       5
#define CD        6
#define UPLOAD    7
#define DOWNLOAD  8     

struct Msg{
   
        int type;
        char cmd[128];
        char filename[128];
        char data[1024];
}msg;


char *getDir(char *cmd);//分割指令和文件,返回文件/文件夹名称
int analyse_Cmd(char *cmd);//分析指令
void getCmd(int c_fd,struct Msg msg);//根据指令做出响应

int main(int argc, char **argv)
{
   
	int s_fd;
	int c_fd;
	
	struct sockaddr_in s_addr;
	struct sockaddr_in c_addr;
	int s_len = sizeof(struct sockaddr_in);
	int c_len = sizeof(struct sockaddr_in);
	
	memset(&s_addr,'\0',s_len);
	memset(&c_addr,'\0',c_len);
	
	//1.socket
	if((s_fd = socket(AF_INET,SOCK_STREAM,0)) == -1){
   
	        printf("creat socket failed\n");
	        exit(-1);
	}
	//2.bind
	s_addr.sin_family = AF_INET;
	s_addr.sin_port = htons(atoi(argv[2]));
	inet_aton(argv[1],&s_addr.sin_addr);
	
	if(bind(s_fd,(struct sockaddr *)&s_addr,s_len) != 0){
   
	        perror("bind");
	        exit(-1);
	}
	//3.listen
	if(listen(s_fd,10) != 0){
   
	        perror("listen");
	        exit(-1);
	}
	while(1){
   
		printf("wait connect -----\n");
		//4.accept
		if((c_fd = accept(s_fd,(struct sockaddr *)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值