📄 client.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 + -