case '0'://判断是否重名
ptemp = phead;
while(ptemp->next!=NULL){
ptemp = ptemp->next;
if(!strcmp(ptemp->cli.cli_name,data_cli.cli_name)){
memset(data_cli.send_text,0,N);
snprintf(data_cli.send_text,N,"用户名[%s]已被占用,请您换一个用户名登录!",data_cli.cli_name);
if(-1==sendto(sockfd,&data_cli,sizeof(data_cli),0,(struct sockaddr *)&clientaddr,clientaddr_len)){
ERRLOG("名字检验信号发送失败");
}
break;
}
}
if(ptemp->next==NULL&&strcmp(ptemp->cli.cli_name,data_cli.cli_name)){
memset(data_cli.send_text,0,N);
strcpy(data_cli.send_text,"登录成功,欢迎使用!\0");
data_cli.operate='1';
if(-1==sendto(sockfd,&data_cli,sizeof(data_cli),0,(struct sockaddr *)&clientaddr,clientaddr_len)){
ERRLOG("名字检验信号发送失败");
}
}
break;
puts("--------欢迎登录Future聊天室--------");
//填充本人数据
data data_cli;
loop:
printf("请输入您登录的名字:\n");
fgets(data_cli.cli_name,sizeof(data_cli.cli_name),stdin);
data_cli.cli_name[strlen(data_cli.cli_name)-1]='\0';
data_cli.operate='0';
//发送检验登录名信息
if(-1==sendto(sockfd,&data_cli ,sizeof(data_cli),0,(struct sockaddr *)&serveraddr,serveraddr_len)){
ERRLOG("登录检验信号发送失败");
}
if(-1==recvfrom(sockfd,&data_cli ,sizeof(data_cli),0,(struct sockaddr *)&serveraddr,&serveraddr_len)){
ERRLOG("接收检验信息失败");
}
if(data_cli.operate=='0'){
printf("%s\n",data_cli.send_text);
goto loop;
}else if(data_cli.operate=='1'){
printf("%s\n",data_cli.send_text);
}
//发送登录信息
if(-1==sendto(sockfd,&data_cli ,sizeof(data_cli),0,(struct sockaddr *)&serveraddr,serveraddr_len)){
ERRLOG("登录信号发送失败");
}
PS:要将姓名等信息也插入到客户端信息结构体中,遍历比对链表中的姓名