⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 client.c

📁 基于TCP的控制台下局域网ftp(C/S),能够实现简单ftp命令。具有简单的客户端身份认证功能。内含简单的makefile文件
💻 C
字号:
#include "client.h"

char user_cmd[10],cmd_arg[20];
char buf[dataLen];

void cmd_help(int sock,int sockmsg);
void cmd_put(int sock,int sockmsg,char *fileName);
void cmd_quit(int sock,int sockmsg);
int   getPasswd(char   *passwd)   ;


int main(int argc,char *argv[]) 
{
 if(argc!=2)
 {
 printf("error!\n");
 printf("please pay attention to this exam\n./client-success 127.0.0.1\n\nwish you have fun!\n");
 }
 int cmd_len,arg_len; 
 int sock, sockmsg,sockusrcheck; 
 char usr_msg_1[]="please enter the username:";
 char usr_msg_2[]="please enter the password:";
 char usr_msg_3[]="the user name or password error!";
 char usr_msg_4[]="welcome! have fun!";
 char usr_msg[50];
 struct sockaddr_in server, servermsg,serverusrcheck; 
	
	//创建两个端口,套接字sock用于接受
	sock=socket(AF_INET,SOCK_STREAM,0);
	//sockmsg套接字用于上传
	sockmsg=socket(AF_INET,SOCK_STREAM,0);
	//sockusrcheck用于认证
	sockusrcheck=socket(AF_INET,SOCK_STREAM,0);

	if (sock<0||sockmsg<0||sockusrcheck<0) 
	{ 
	  perror("opening stream socket"); 
	  exit(1); 
	} 
server.sin_family=AF_INET;
server.sin_port=htons(CLIENT_PORT); 
server.sin_addr.s_addr=inet_addr(argv[1]);

servermsg.sin_family=AF_INET; 
servermsg.sin_port=htons(CLIENT_PORT+1); 
servermsg.sin_addr.s_addr=inet_addr(argv[1]);

serverusrcheck.sin_family=AF_INET; 
serverusrcheck.sin_port=htons(CLIENT_PORT+2);
serverusrcheck.sin_addr.s_addr=inet_addr(argv[1]);
//连接到服务器
if (	connect(sock,(struct sockaddr *)&server,sizeof server)<0
	|| connect(sockmsg,(struct sockaddr *)&servermsg,sizeof servermsg)<0
	|| connect(sockusrcheck,(struct sockaddr *)&serverusrcheck,sizeof serverusrcheck)<0) 
	{ 
	perror("connecting stream socket"); 
	exit(1); }	 
//认证

	int rval=0;
	memset(usr_msg,0,sizeof usr_msg);
	rval=read(sockusrcheck,usr_msg,sizeof usr_msg);
	if(rval<0||rval==0)
	{
		perror("read\n");
		goto Loop;
	}

	if(strcmp(usr_msg,usr_msg_1)==0)
	{
	  printf("%s",usr_msg);
	}

	memset(usr_msg,0,sizeof usr_msg);
	scanf("%s",usr_msg);
	rval=write(sockusrcheck,usr_msg,sizeof usr_msg);
	if(rval<0||rval==0)
	{
		perror("write\n");
		goto Loop;
	}

	memset(usr_msg,0,sizeof usr_msg);
	rval=read(sockusrcheck,usr_msg,sizeof usr_msg);
	if(rval<0||rval==0)
		{	
			perror("read\n");
			goto Loop;
		}
	if(strcmp(usr_msg,usr_msg_2)==0)
	{
	//	printf("%s",usr_msg);
		memset(usr_msg,0,sizeof usr_msg);
		getPasswd(usr_msg);
		rval=write(sockusrcheck,usr_msg,sizeof usr_msg);
		printf("\nYou input passwd : %s \n",usr_msg);
		if(rval<0||rval==0)
		{	
			perror("write\n");
			goto Loop;
		}
		memset(usr_msg,0,sizeof usr_msg);
		rval=read(sockusrcheck,usr_msg,sizeof usr_msg);
		if(rval<0||rval==0)
		{	
			perror("read\n");
			goto Loop;
		}
		if(strcmp(usr_msg,usr_msg_3)==0)
		{
		  printf("%s\n",usr_msg);	
		}
	}
	

//循环接受命令并处理
while(strcmp(usr_msg,usr_msg_4)==0)
    {
	memset(user_cmd,0,10);
	memset(cmd_arg,0,20);

	//接受输入命令
	printf("Command: ");
	scanf("%s",user_cmd);
	cmd_len=strlen(user_cmd);
	//对命令分类处理
	if(strcmp(user_cmd,"quit")==0) //command "quit"
	{
	 cmd_quit(sock,sockmsg);
	 goto Loop;
	} 
	else if(strcmp(user_cmd,"help")==0) //command "help"
	{
	  cmd_help(sock,sockmsg);
	}
	else if(strcmp(user_cmd,"put")==0) //command "put"
	{ 
	  //接受要上传的文件名
	  scanf("%s",cmd_arg);
	  cmd_put(sock,sockmsg,cmd_arg);
	}
	else
	{
	  printf("Bad command!\n");
	}
   } //while循环
Loop:
    close(sockmsg);
    close(sock);
    printf("connection close!\n");
    exit(0);
}//主函数




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -