#include #include #include #include #include #include #include #include #define MAXLINE 1024 int result; void *myFunc(void *arg) { int val = 0; int clisockfd; int readn, writen; char buf[MAXLINE]; clisockfd = *((int *)arg); //¼ÒÄÏfd ¹øÈ£¸¦ ÀúÀå. readn = read(clisockfd, buf, MAXLINE); //client·Î ºÎÅÍ ¿À´Â µ¥ÀÌÅ͸¦ buf¿¡ ÀúÀå if(readn <= 0) { perror("Read Error"); return NULL; } val = atoi(buf); result += val; //ÀоîµéÀÎ °ªÀ» result¶ó´Â °øÀ¯º¯¼ö¿¡ ´õÇÔ. printf("%d\n", result); //°øÀ¯º¯¼ö°ª Ãâ·Â } void error(char *msg){ perror(msg); exit(1); } int main(int argc, char *argv[]){ int sockfd, newsockfd, portno = 8888, clilen, th_id, status, count_cli = 0; int cli_sockfd[3]; //socket fd 3°³ ÀúÀåÇÒ º¯¼ö pthread_t thread_t[3]; //¾²·¹µå 3°³ °ü·Ã º¯¼ö char buffer[MAXLINE]; struct sockaddr_in serv_addr, cli_addr; //server¿Í client Á¤º¸ ÀúÀåÇÒ º¯¼ö int n; int data; printf("using port #%d\n", portno); sockfd = socket(AF_INET, SOCK_STREAM, 0); if(sockfd < 0){ error(const_cast("ERROR opening socket")); } bzero((char *)&serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(portno); if(bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr))<0){ error(const_cast("ERROR on binding")); } if(listen(sockfd, 5) == -1){ error(const_cast("ERROR on binding")); } clilen = sizeof(cli_addr); while(1) { if((newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, (socklen_t*) &clilen)) < 0){ error(const_cast("ERROR on accept")); } //Ŭ¶óÀÌ¾ðÆ® Accept! cli_sockfd[count_cli] = newsockfd; //¼ÒÄÏ fd ¹è¿­¿¡ sockfd Á¤º¸ ÀúÀå. printf("client %d's sock_id : %d\n", count_cli+1, cli_sockfd[count_cli]); th_id = pthread_create(&(thread_t[count_cli]), NULL, myFunc, (void *) &newsockfd); //client¸¦ °¢ Thread¸¦ ÀÌ¿ëÇÏ¿© µ¿ÀÛ if(th_id != 0) { perror("Thread Create Error"); return 1; } pthread_join(thread_t[count_cli], (void **)&status); count_cli++; if(count_cli == 3){ break; } } sprintf(buffer, "%d\n", result); printf("%s\n", buffer); write(cli_sockfd[0], buffer, strlen(buffer)); write(cli_sockfd[1], buffer, strlen(buffer)); write(cli_sockfd[2], buffer, strlen(buffer)); //°¢ sockfd¸¦ ÀÌ¿ëÇÏ¿©, °¢ ClientÇÑÅ× buffer ³»¿ë Àü´Þ }