== 서버 == {{{ #include #include #include #include #include #include #include #include #define BUFF_SIZE 1024 int thread_num[25]; //스레드 번호 (해당 스레드 활성화시 번호 값 + 1, 비활성화시 0) //ex) thread_num[스레드 번호]==스레드 번호+1 int client_socket_array[25]; //클라이언트 소캣, 각 스레드 마다 자신의 번호에 해당하는 소캣 사용 //ex) 스레드가 사용 중인 소캣 == client_socket_array[스레드 번호] char id[100][256]; char password[100][256]; char id_state[100]; int id_num; char chat[100][BUFF_SIZE+5]; char chat_s[100], chat_e; void* rutine(void* data)//data = &thread_num[스레드 번호] { int t_num,i_num; int client_socket; char buff_rcv[BUFF_SIZE+5],buff_snd[BUFF_SIZE+5]; int rcv; int i,j; t_num=*((int*)data); //사용자가 이해하기 쉽도록 스레드 번호에 +1 값을 쓰도록 한다. client_socket=client_socket_array[t_num-1]; //코드의 간결화를 위해 값을 복사한다. recv(client_socket, buff_rcv,BUFF_SIZE,0); printf("%s\n",buff_rcv); sprintf(buff_snd,"test\n"); send(client_socket, buff_snd, strlen(buff_snd)+1,0); printf("%dth client connected\n",t_num); //접속 검사 코드 //로그인 루프 recv(client_socket, buff_rcv,BUFF_SIZE,0); if(buff_rcv[0]=='n')//새 계정 생성 { printf("client try to make ID\n"); sprintf(buff_snd,"i\n"); send(client_socket, buff_snd, strlen(buff_snd)+1,0);//id 요구 recv(client_socket, buff_rcv,BUFF_SIZE,0); for(i=0;buff_rcv[i];i++) id[id_num][i]=buff_rcv[i]; printf("%dth client's name : %s\n",t_num,buff_rcv); sprintf(buff_snd,"p\n"); send(client_socket, buff_snd, strlen(buff_snd)+1,0);//password 요구 recv(client_socket, buff_rcv,BUFF_SIZE,0); printf("%dth client's password : %s\n",t_num,buff_rcv); for(i=0;buff_rcv[i];i++) password[id_num][i]=buff_rcv[i]; i_num=id_num; id_num++; printf("%dth client made new ID",t_num); sprintf(buff_snd,"a\n"); send(client_socket, buff_snd, strlen(buff_snd)+1,0);//접속 확인 } else { printf("client try to login\n"); while(1) { sprintf(buff_snd,"i\n"); send(client_socket, buff_snd, strlen(buff_snd)+1,0);//id 요구 recv(client_socket, buff_rcv,BUFF_SIZE,0); for(i=0;i0) { printf("received\n"); sprintf(buff_snd,"%dth client : %s",num,buff_rcv); chat_e++; chat_e%=100; for(i=0;i<20;i++) { if(thread_num[i]) send(client_socket_array[i],buff_snd,strlen(buff_snd)+1,0); } for(i=0;i