📄 server.c
字号:
#include "main.h"#define MAX 1024#define T_MAX 20short int port=8080;node *head;void thread(node *p){ FILE *fp; int i,n,socket; char name[50]; int flag=0; char buff[MAX]; char mesg[MAX]; char Mesg[MAX]; char out[100]; char s[50],f[50]; char *q,*r,*t; node *ptr; socket=p->sockfd; while(1) { memset(buff,0,sizeof(buff)); n=read(socket,buff,MAX); if(n<=0) break; if((q=strchr(buff,'\n'))!=NULL) *q='\0'; printf("received from client :%s\n",buff); if(flag==0){ q=strstr(buff,"REGIST"); if(q!=NULL) { q=strchr(buff,':'); if(q!=NULL) q++; r=strchr(q,':'); if(r!=NULL) *r='\0'; r++; n=regist(q,r); if(n==0) { strcpy(s,"regist sucsess!"); send(socket,s,strlen(s),0); del(head,socket); pthread_exit(NULL); } if(n==-1) { strcpy(f,"regsit failed,please retry!"); send(socket,f,strlen(f),0); continue; } } else { q=strstr(buff,"LOGIN"); if(q!=NULL) { q=strchr(buff,':'); if(q!=NULL) q++; r=strchr(q,':'); if(r!=NULL) *r='\0'; r++; n=login(q,r); if(n==0) { strcpy(out,q); strcpy(s,"login sucsess!welcome!\n"); flag=1; send(socket,s,strlen(s),0); ptr=head->next; while(ptr!=NULL) { if(ptr->sockfd==socket) { strcpy(ptr->user_name,q); strcpy(name,q); break; } else ptr=ptr->next; } strcat(q,":login chating room!\n"); group(head,q); } else { del(head,socket); pthread_exit(NULL); } } else{ help(socket); } } } if(flag==1) { if(strcmp(buff,"RECORD")==0) { fp=fopen(name,"r"); if(fp==NULL) { perror("open"); continue; } memset(mesg,0,sizeof(mesg)); while(fgets(mesg,sizeof(mesg),fp)!=NULL) { send(socket,mesg,strlen(mesg),0); } } else if(strcmp(buff,"SHOW")==0) showuser(head,socket); else if(strcmp(buff,"HELP")==0) { help(socket); } else { q=strchr(buff,':'); if(q==NULL) help(socket); else{ r=q+1; *q='\0'; if(strcmp(buff,"ALL")==0) { memset(mesg,0,sizeof(mesg)); strcat(mesg,name); strcat(mesg," to ALL:"); strcat(mesg,r); strcat(mesg,"\n"); group(head,mesg); if((fp=fopen(name,"a+"))==NULL) { perror("open"); pthread_exit(NULL); } fputs(mesg,fp); fclose(fp); } else if(strcmp(buff,"TO")==0) { q=strchr(r,':'); t=q+1; *q='\0'; memset(mesg,0,sizeof(mesg)); strcat(mesg,name); strcat(mesg,":"); strcat(mesg,t); strcat(mesg,"\n"); single(head,r,mesg); if((fp=fopen(name,"a+"))==NULL) { perror("open"); pthread_exit(NULL); } memset(mesg,0,sizeof(mesg)); strcat(mesg,"TO "); strcat(mesg,r); strcat(mesg," :"); strcat(mesg,t); strcat(mesg,"\n"); fputs(mesg,fp); fclose(fp); } else help(socket); } } } } if(flag==1) { strcat(out,":logout chating room!\n"); group(head,out); } del(head,socket); pthread_exit(NULL);}int main(){ struct sockaddr_in sin; struct sockaddr_in pin; int listen_fd; int conn_fd; socklen_t address_size=sizeof(pin); char str[INET_ADDRSTRLEN]; int i=0; int len; int ret; int n; node *ptr; pthread_t tid[T_MAX]; signal(SIGPIPE,SIG_IGN); signal(SIGCHLD,SIG_IGN); head=(node *)malloc(sizeof(node)); head->sockfd=0; head->next=NULL; strcpy(head->user_name,"admin"); bzero(&sin,sizeof(sin)); sin.sin_family=AF_INET; sin.sin_addr.s_addr=INADDR_ANY; sin.sin_port=htons(port); listen_fd=socket(AF_INET,SOCK_STREAM,0); { int opt=1; setsockopt(listen_fd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt)); } ret=bind(listen_fd,(struct sockaddr *)&sin,sizeof(sin)); if(ret<0){ perror("bind"); exit(1); } listen(listen_fd,T_MAX); printf("accepting connections......\n"); while(1){ conn_fd=accept(listen_fd,(struct sockaddr *)&pin,&address_size); ptr=(node *)malloc(sizeof(node)); ptr->sockfd=conn_fd; strcpy(ptr->user_name,"unname"); ptr->next=NULL; insert(head,ptr); pthread_create(&tid[i],NULL,(void*)thread,ptr); i++; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -