break;
msg->data[strlen(msg->data)-1] = '\0';
printf("cli:msg->data : %s \n", msg->data);
send(sockfd, msg, sizeof(MSG), 0);
recv(sockfd, msg, sizeof(MSG), 0);
printf("\n %s\n", msg->data);
}
return 0;
}
//用户注册
int usr_register(int sockfd, MSG *msg) {
msg->type = R;
while(getchar() != '\n')
continue;
printf("register name: ");
fgets(msg->name, NAME_SIZE, stdin); //fgets函数会将'\n'也保存到数组中
if (strlen(msg->name) < 5){
printf("\n name is too short!\n");
return -1;
}
msg->name[strlen(msg->name)-1] = '\0'; //将数组中的‘\n'用‘\0’覆盖
printf("passwd: ");
fgets(msg->data, N, stdin);
msg->data[strlen(msg->data)-1] = '\0';
send(sockfd, msg, sizeof(MSG), 0); //向服务器发送注册信息
recv(sockfd, msg, sizeof(MSG), 0); //接收服务器的消息
printf("\n\t%s\n", msg->data);
return 0;
}
//用户登录
int login(int sockfd, MSG *msg) {
msg->type = L;
while(getchar() != '\n')
continue;
printf("login name: ");
fgets(msg->name, 32, stdin);
msg->name[strlen(msg->name)-1] = '\0';
printf("passwd: ");
fgets(msg->data, N, stdin);
msg->data[strlen(msg->data)-1] = '\0';
send(sockfd, msg, sizeof(MSG), 0);
recv(sockfd, msg, sizeof(MSG), 0);
printf("\n %s\n", msg->data);
if (strncmp(msg->data, "welcome", 7) == 0) //判断用户是否登录成功
return 1;
else
return 0;
//查询单词
int check_word(int sockfd, MSG *msg) {
msg->type = C;
while(getchar() != '\n')
continue;
while ( 1 ) {
printf("input (# to quit) > ");
fgets(msg->data, N, stdin);
if (msg->data[0] == '\n') //判断用户是否输入要查询的单词
continue;
if (strncmp(msg->data, "#", 1) == 0) //#退出
break;
msg->data[strlen(msg->data)-1] = '\0';
printf("msg->data : %s \n", msg->data);
send(sockfd, msg, sizeof(MSG), 0);
recv(sockfd, msg, sizeof(MSG), 0);
printf("\n %s\n", msg->data);
} return 0;
}
//查询历史记录
int history_record(int sockfd, MSG *msg) {
msg->type = H;
send(sockfd, msg, sizeof(MSG), 0);
while (recv(sockfd, msg, sizeof(MSG), 0) > 0) {
if (strncmp(msg->data, "ok", 2) == 0) //如果服务器返回‘ok’说明成功 break;
printf("%s\n", msg->data);
if (strncmp(msg->data, "error", 5) == 0)