ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : article>socket_transmission
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. ¼Ò°³
fork()´Â »õ·Î¿î ÇÁ·Î¼¼½º¸¦ »ý¼º½Ã۱â À§Çؼ »ç¿ëÇÏ´Â ½Ã½ºÅÛÄݷΠƯÈ÷ ´ÙÁßÀÇ Å¬¶óÀÌ¾ðÆ®¿Í Åë½ÅÀ» ÇØ¾ß ÇÏ´Â ¼¹öÇÁ·Î±×·¥ÀÇ ÀÛ¼ºÀ» À§Çؼ ¾²·¹µå¿Í ÇÔ²² ÀϹÝÀûÀ¸·Î »ç¿ëµÈ´Ù.
ÀÎÅÍ³Ý È¯°æÀÇ ¹ß´Þ·Î ÀÎÇØ¼ ÃÖ±ÙÀÇ ¼¹ö ÇÁ·Î±×·¥µéÀº °¡´ÉÇÑÇÑ È¿À²ÀûÀ¸·Î ÃÖ¼ÒÀÇ ºñ¿ë¸¸À» ¼ÒºñÇÏ¸é¼ Æ¯Á¤ÇÑ ÀÏÀ» ó¸®ÇؾßÇÒ Çʿ䰡 ÀÖ´Ù. ÀϹÝÀûÀ¸·Î fork()¸¦ È£ÃâÇØ¼ »õ·Î¿î ÇÁ·Î¼¼½º¸¦ »ý¼º½ÃŰ°Å³ª pthread_create()µîÀ» ÀÌ¿ëÇØ¼ »õ·Î¿î ¾²·¹µå¸¦ »ý¼º½ÃŰ´Â °Ç ¸Å¿ì ¸¹Àº ÀÚ¿ø°ú ½Ã°£À» ¼Ò¸ðÇÑ´Ù. ±×·¯¹Ç·Î °¡´ÉÇϸé ÀÌµé ½Ã°£À» ÁÙ¿©¾ßÇÒ Çʿ䰡 ÀÖ´Ù.
ÀÌ·± ÀÌÀ¯·Î ¾²·¹µå ȤÀº ÇÁ·Î¼¼½º¸¦ ¹Ì¸® »ý¼º½ÃÄѼ ÇÊ¿äÇÒ ¶§ ÀÛ¾÷À» ÇÒ´ç ½ÃŰ´Â ¹æ¹ýÀ» »ç¿ëÇÏ°Ô µÈ´Ù. ¾²·¹µå¸¦ ¹Ì¸® »ý¼º½ÃÄѼ È¿À²À» ³ôÀÌ´Â ¹æ¹ýÀº ÀÌ¹Ì ¾²·¹µå Ç®ÀÛ¼º¿¡¼ ´Ù·éÀûÀÌ ÀÖ´Ù.
¿©±â¿¡¼´Â ÇÁ·Î¼¼½º Ç®À» ¸¸µé¾î¼ È¿À²¼ºÀ» ³ôÀÎ ¼¹öÇÁ·Î±×·¥ÀÇ ÀÛ¼º ±â¹ý¿¡ ´ëÇØ¼ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. ÇÁ·Î¼¼½º Ç®ÀÇ ÀÛ¼º
±âº»ÀûÀÎ °³³äÀº ¾²·¹µå Ç®°ú °°´Ù. ºÎ¸ð ¾²·¹µå´Â ¿ì¼± ÇÊ¿äÇÑ ¸¸ÅÀÇ ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ¹Ì¸® ÇÒ´ç ½ÃÄÑ ³õ´Â´Ù. ºÎ¸ð ¾²·¹µå´Â socket()->bind()->listen() À¸·Î »ý¼ºµÈ µè±â ¼ÒÄÏÀ» ÅëÇÏ¿© Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» ±â´Ù¸°´Ù. ¸¸¾à Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀÌ ¹ß»ýÇÑ´Ù¸é ºÎ¸ð ¼ÒÄÏÀº ³î°í ÀÖ´Â ÀÚ½Ä ÇÁ·Î¼¼½º°¡ Ŭ¶óÀÌ¾ðÆ®¸¦ ó¸®Çϵµ·Ï ó¸®ÇÑ´Ù.
±×·±µ¥ ÇÁ·Î¼¼½º Ç®ÀÇ °æ¿ì ¾²·¹µå Ç®¿¡¼´Â °ÞÀ» ¼ö ¾ø¾ú´ø "¼ÒÄÏ Àü´Þ"°ú °ü·ÃµÈ ¹®Á¦¿¡ Á÷¸éÇÏ°Ô µÈ´Ù. ¾²·¹µåÀÇ °æ¿ì¶ó¸é ºÎ¸ð ÇÁ·Î¼¼½º¿Í ÀÚ½Ä ÇÁ·Î¼¼½º°£ÀÇ ÆÄÀÏÀÌ °øÀ¯ µÇ¹Ç·Î ÇÁ·Î±×·¡¸Ó´Â ´ÜÁö ³î°í ÀÖ´Â ¾²·¹µå¸¦ ±ú¿ì°í "¾î¶² ¿¬°á ¼ÒÄÏ"À» ÅëÇØ¼ Åë½ÅÇÏ¸é µÉÁö¸¦ ÀÚ½Ä ¾²·¹µå¿¡°Ô ¾Ë·ÁÁֱ⸸ ÇϸéµÈ´Ù.
±×·¯³ª ÀüÇô º°°³ÀÇ ÇÁ·Î¼¼½º·Î ±¸¼ºµÇ´Â ÇÁ·Î¼¼½º Ç®¿¡¼´Â ÀÌ·¯ÇÑ ¹æ¹ýÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù. ÀÏ´Ü fork()¸¦ ÅëÇØ¼ »õ·Î¿î ÇÁ·Î¼¼½º°¡ ¸¸µé¾î Á³´Ù¸é À̵éÀº ¼·Î ÀüÇô ¹ú°³ÀÇ µ¶¸³µÈ ÆÄÀÏÀ» °¡Áö°í ÀÛ¾÷Çϱ⠶§¹®ÀÌ´Ù. ºÎ¸ð ÇÁ·Î¼¼½º´Â ¾î¶±ÇؼµçÁö »õ·Î »ý¼ºµÈ ¼ÒÄÏÀ» ÀڽĿ¡°Ô Àü´ÞÇØ ÁÖ¾î¾ß ÇÏ´Â ¹®Á¦¸¦ ÇØ°áÇØ¾ß ÇÑ´Ù.
¼ÒÄÏ Àü´Þ
¼ÒÄÏ Àü´ÞÀ» À§Çؼ »ç¿ëÇÒ ±âº» Å×½ºÆ® ¼¹ö ÄÚµå
#include <sys/stat.h> #include <sys/socket.h> #include <signal.h> #include <unistd.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char **argv) { int server_sockfd, client_sockfd; int state, client_len; int pid; struct sockaddr_in clientaddr, serveraddr, myaddr; char buf[256] = {0x00,}; // internet ±â¹ÝÀÇ ½ºÆ®¸² ¼ÒÄÏÀ» ¸¸µéµµ·Ï ÇÑ´Ù. // server_sockfd ´Â endpoint ¼ÒÄÏ(µè±â ¼ÒÄÏ) À¸·Î »ç¿ëµÈ´Ù. if ((server_sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("socket error : "); exit(0); } bzero(&serveraddr, sizeof(serveraddr)); serveraddr.sin_family = AF_INET; serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); serveraddr.sin_port = htons(12345); // µè±â ¼ÒÄÏ¿¡ ¼ÒÄÏÆ¯¼º(ÁÖ¼Ò, Æ÷Æ®)¸¦ ¹¾îÁØ´Ù. state = bind(server_sockfd , (struct sockaddr *)&serveraddr, sizeof(serveraddr)); if (state == -1) { perror("bind error : "); exit(0); } state = listen(server_sockfd, 5); if (state == -1) { perror("listen error : "); exit(0); } // ¸¸¾à µè±â ¼ÒÄÏÀ¸·Î Ŭ¶óÀÌ¾ðÆ® ¿¬°áÀÌ µé¾î¿Ô´Ù¸é, // »õ·Î¿î Ŭ¶óÀÌ¾ðÆ®¿ÍÀÇ Åë½ÅÀ» À§ÇÑ ¼ÒÄÏ ÁöÁ¤¹øÈ£¸¦ ÇÒ´çÇÑ´Ù. signal(SIGCHLD, SIG_IGN); while(1) { client_sockfd = accept(server_sockfd, (struct sockaddr *)&clientaddr, &client_len); if (client_sockfd == -1) { perror("Accept error : "); exit(0); } pid = fork(); if (pid == 0) { read(client_sockfd, buf, 256); printf("%s\n", buf); sleep(1); printf("Child Close\n"); close(client_sockfd); exit(0); } } close(client_sockfd); return 1; } |
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|