¸ÖƼ ½º·¹µå ±â¹Ý ¼ÒÄÏ ÇÁ·Î±×·¡¹Ö
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

Contents

1 ¸ÖƼ ½º·¹µå ±â¼ú¿¡ ´ëÇÏ¿©
2 ¸ÖƼ ½º·¹µå ±â¹Ý ¼ÒÄÏ ÇÁ·Î±×·¡¹Ö
2.1 ¸ÖƼ ½º·¹µå ±â¹Ý ¼­¹ö ÇÁ·Î±×·¥ ¿¹Á¦
2.2 ¸ÖƼ ½º·¹µå ±â¹Ý ¼ÒÄÏ ÇÁ·Î±×·¥ÀÇ ÀåÁ¡°ú ´ÜÁ¡

1 ¸ÖƼ ½º·¹µå ±â¼ú¿¡ ´ëÇÏ¿©

½º·¹µå¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº Thread ¹Ì´Ï »çÀÌÆ®¿¡ ÀÚ¼¼È÷ ±â¼ú µÇ¾î ÀÖ´Ù. ¿©±â¿¡¼­´Â ¼ÒÄÏ ÇÁ·Î±×·¡¹ÖÀ» Áß½ÉÀ¸·Î ¸ÖƼ ½º·¹µå ±â¼úÀÌ °¡Áö´Â Ư¡À» ÁýÁßÀûÀ¸·Î »ìÆìº¸µµ·Ï ÇϰڴÙ.

¿î¿µÃ¼Á¦´Â ÇÁ·Î±×·¥ÀÇ ½ÇÇà À̹ÌÁöÀÎ ÇÁ·Î¼¼½º¸¦ ÃÖ¼Ò ½ÇÇà ´ÜÀ§·Î ÀÛµ¿ÇÑ´Ù. ´ÙÁß ÇÁ·Î¼¼½º ¿î¿µÃ¼Á¦´Â À̵é ÇÁ·Î¼¼½º¸¦ ½Ã ºÐÇÒ ¹æ½ÄÀ¸·Î ½ºÀ§Äª Çϸ鼭, µ¿½Ã¿¡ ¿©·¯ °³ÀÇ ÇÁ·Î¼¼½º¸¦ ¿î¿ëÇÑ´Ù. (¾ö¹ÐÈ÷ µûÁöÀÚ¸é, µ¿½Ã°¡ ¾Æ´Ñ µ¿½ÃÀÎ °Í ó·³ ´À²¸Áö´Â °ÍÀÌÁö¸¸ ÀÌÇØÇϱ⠽±°Ô µ¿½Ã¶ó°í ÇϰڴÙ.)


ÀÌ ÇÁ·Î¼¼½º´Â ¿©·¯ °³ÀÇ ¹®¸ÆÀ¸·Î ÀÌ·ç¾îÁö´Âµ¥, ¾îÂ÷ÇÇ ´ÙÁß ÇÁ·Î¼¼½º ¿î¿µÃ¼Á¦°¡ ÇÁ·Î¼¼½º¸¦ ½ºÀ§Äª ÇÏ´Â °Å¶ó¸é ¹®¸ÆÀ» ½ºÀ§Äª ÇÒ ¼ö ÀÖÁö ¾ÊÀ»±î ? °£´ÜÈ÷ ¸»Çؼ­ ÄÚµå´ÜÀ§·Î ½ºÀ§Äª ÇÏ´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô ½ºÀ§Äª °¡´ÉÇÑ ÇÁ·Î¼¼½ºÀÇ ¹®¸ÆÀ» ½º·¹µå¶ó°í ÇÑ´Ù. ÇÁ·Î¼¼½º´Â ÃÖ¼ÒÇÑ Çϳª ÀÌ»óÀÇ ½º·¹µå·Î ±¸¼ºµÇ¾î ÀÖ´Ù. ¸¸¾à µÎ °³ÀÇ ½º·¹µå·Î ±¸¼ºµÈ´Ù¸é, À̸¦ ¸ÖƼ ½º·¹µå ÇÁ·Î±×·¥À̶ó°í ÇÑ´Ù.


2 ¸ÖƼ ½º·¹µå ±â¹Ý ¼ÒÄÏ ÇÁ·Î±×·¡¹Ö

¾Õ¼­ ¸ÖƼ ÇÁ·Î¼¼½º ±â¹ÝÀÇ ¼ÒÄÏ ÇÁ·Î±×·¥¿¡¼­ ¿©·¯ °³ÀÇ ÇÁ·Î¼¼½º¸¦ µ¿½Ã¿¡ ¿î¿ëÇÔÀ¸·Î½á, ´Ù¼öÀÇ Å¬¶óÀÌ¾ðÆ®¸¦ ó¸®ÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æº¸¾Ò´Ù.

ÇÙ½ÉÀº ¼­¹ö ÇÁ·Î±×·¥ÀÌ µè±â ¼ÒÄϰú ¿¬°á ¼ÒÄÏÀÌ ºÐ¸®µÇ¾î Àִµ¥, µè±â ¼ÒÄÏ¿¡ Ŭ¶óÀÌ¾ðÆ® ¿¬°áÀÌ µé¾î¿Í¼­ ¿¬°á ¼ÒÄÏÀÌ ¸¸µé¾î Áö¸é, ¿¬°á ¼ÒÄÏÀ» »ó¼Ó ¹Þ´Â »õ·Î¿î ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ¸¸µé¾î¼­ Ŭ¶óÀÌ¾ðÆ® ¿äûÀ» ó¸®Çϴµ¥ ÀÖ´Ù.

¸ÖƼ ½º·¹µåµµ ÀÌ¿Í µ¿ÀÏÇÑ ¹æ½ÄÀ¸·Î ´Ù¼öÀÇ Å¬¶óÀÌ¾ðÆ®¸¦ ó¸®ÇÒ ¼ö ÀÖ´Ù. ÇÁ·Î¼¼½º ´ë½Å ½º·¹µå¸¦ ÀÌ¿ëÇÏ¸é µÈ´Ù. Áï µè±â ¼ÒÄÏÀ» ÅëÇØ¼­ »õ·Î¿î Ŭ¶óÀÌ¾ðÆ®°¡ µé¾î¿À¸é fork ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ¸¸µå´Â ´ë½Å¿¡, pthread_createÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ »õ·Î¿î ½º·¹µå¸¦ ¸¸µå´Â °ÍÀÌ´Ù. ÀÌ ½º·¹µå´Â ¹®¸ÆÀ» Æ÷ÇÔÇÑ ÄÚµå Á¶°¢À¸·Î µè±â ¼ÒÄÏÀÇ ¼ÒÄÏ ÁöÁ¤ ¹øÈ£¸¦ ¸Å°³ º¯¼ö·Î ¹Þ¾ÆµéÀÏ ¼ö ÀÖ´Ù. ÀÌ µè±â ¼ÒÄÏÀ» ÀÌ¿ëÇØ¼­ Ŭ¶óÀÌ¾ðÆ®¸¦ ó¸®ÇÏ´Â ½ÄÀÌ´Ù.

¸ÖƼ ½º·¹µå ¹æ½ÄÀÇ ¼­¹ö´Â ´ë°Ô ´ÙÀ½°ú °°Àº È帧À» °¡Áø´Ù.


2.1 ¸ÖƼ ½º·¹µå ±â¹Ý ¼­¹ö ÇÁ·Î±×·¥ ¿¹Á¦

¿¡ÄÚ ¼­ºñ½º¸¦ ¸ÖƼ ½º·¹µå ±â¹ÝÀ¸·Î ¸¸µé¾î º¸¾Ò´Ù.
001  #include <sys/socket.h>
002  #include <sys/stat.h>
003  #include <arpa/inet.h>
004  #include <stdio.h>
005  #include <string.h>
006  #include <pthread.h>
007  
008  #define MAXLINE 1024
009  
010  void *myFunc(void *arg);
011  
012  int main(int argc, char **argv)
013  {
014      int listenfd, sockfd;    
015      struct sockaddr_in sockaddr;
016  
017      int socklen;
018      int th_id;
019  
020      pthread_t thread_t;
021  
022      if(argc != 2)
023      {
024          printf("Usage : %s [port]\n", argv[0]);
025      }
026      
027      if((listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
028      {
029          perror("socket error");
030          return 1;
031      }
032  
033      memset((void *)&sockaddr,0x00,sizeof(sockaddr));
034      sockaddr.sin_family = AF_INET;
035      sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);
036      sockaddr.sin_port = htons(atoi(argv[1]));
037  
038      if( bind(listenfd, (struct sockaddr *)&sockaddr, sizeof(sockaddr)) == -1)
039      {
040          perror("bind error");
041          return 1;
042      }
043  
044      if(listen(listenfd, 5) == -1)
045      {
046          perror("listen error");
047          return 1;
048      }
049  
050      while(1)
051      {
052          sockfd = accept(listenfd, (struct sockaddr *)&sockaddr, &socklen);
053          if(sockfd == -1)
054          {
055              perror("accept error");
056              return 1;
057          }
058          th_id = pthread_create(&thread_t, NULL, myFunc, (void *)&sockfd);
059          if(th_id != 0)
060          {
061              perror("Thread Create Error");
062              return 1;
063          }
064          pthread_detach(thread_t);
065      }
066  }
067  
068  void *myFunc(void *arg)
069  {
070      int sockfd;
071      int readn, writen;
072      char buf[MAXLINE];
073      sockfd = *((int *)arg);
074  
075      while(1)
076      {
077          readn = read(sockfd, buf, MAXLINE);
078          if(readn <= 0)
079          {
080              perror("Read Error");
081              return NULL;
082          }
083          writen = write(sockfd, buf, readn);
084          if(readn != writen)
085          {
086              printf("write error %d : %d\n", readn, writen);
087              return NULL;
088          }
089      }
090  }
091  
1 - 57 socket -> bind -> listen -> acceptÀÇ ÀϹÝÀûÀÎ °úÁ¤À» °ÅÄ£´Ù.
58 - 63 accept ÇÔ¼ö·Î ¿¬°á ¼ÒÄÏÀ» °¡Á®¿À¸é, Ŭ¶óÀÌ¾ðÆ®¿ÍÀÇ Åë½ÅÀ» ó¸®ÇÒ ½º·¹µå ÇÔ¼ö myFunc¸¦ È£ÃâÇÑ´Ù. ¿¬°á ¼ÒÄÏÀ» ½º·¹µå ÇÔ¼öÀÇ ¸Å°³ º¯¼ö·Î ³Ñ±ä´Ù.
64 ¿öÄ¿ ½º·¹µå¸¦ ±â´Ù¸± Çʿ䰡 ¾øÀ¸¹Ç·Î detach ½ÃÄ×´Ù.

Å×½ºÆ®´Â echo Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥À» ÀÌ¿ëÇß´Ù.

2.2 ¸ÖƼ ½º·¹µå ±â¹Ý ¼ÒÄÏ ÇÁ·Î±×·¥ÀÇ ÀåÁ¡°ú ´ÜÁ¡

½º·¹µå´Â ÄÚµå Á¶°¢À̹ǷΠÇÁ·Î¼¼½º¸¦ º¹»çÇÏ´Â ¸ÖƼ ÇÁ·Î¼¼½º ¹æ½Ä º¸´Ù Á» ´õ ÀÛ°í ºü¸£°Ô ÀÛµ¿ÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖ´Ù. ¹Ý¸é µ¶¸³µÈ ÇÁ·Î¼¼½º ´ÜÀ§·Î ±¸µ¿µÇÁö ¾Ê±â ¶§¹®¿¡, µð¹ö±ëÀÌ Èûµé´Ù´Â ´ÜÁ¡ÀÌ ÀÖ´Ù. ¶ÇÇÑ ÇϳªÀÇ ½º·¹µå¿¡ »ý±ä ¹®Á¦°¡ Àüü ÇÁ·Î¼¼½º¿¡ ¹®Á¦¸¦ ÁÙ ¼ö ÀÖ´Ù´Â ¹®Á¦Á¡µµ ÀÖ´Ù.

¸¸¾à Ưº°È÷ ¹Ù»Û ¼­¹ö°¡ ¾Æ´Ï¶ó¸é, ¸ÖƼ ½º·¹µå º¸´Ù´Â ¸ÖƼ ÇÁ·Î¼¼½º ¹æ½ÄÀ» ¼±ÅÃÇÏ´Â °Ô ³´´Ù´Â°Ô ³» ÀǰßÀÌ´Ù.

category_network
programing
category__5
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.