ȸ¿ø°¡ÀԡžÆÀ̵ð/ºñ¹øã±â
ȨÀ¸·Î


´ÙÁß ¿¬°á Çã¿ë ¼­¹öÀÇ ±¸Çö¹ý (socket programming)
12³â Àü
´ÙÁß »ç¿ëÀÚÀÇ connect ¸¦ ó¸®Çϱâ À§ÇÑ ¹æ¹ýÀº ÃÑ 3°¡ÁöÀÇ ¹æ½ÄÀ¸·Î ±¸ºÐÇÑ´Ù.

1. À¯´Ð½º ȣȯȯ°æ¿¡¼­ Á¦°øÇÏ´Â fork() ¸¦ ÀÌ¿ëÇÑ ´ÙÁß ÇÁ·Î¼¼½º
2. IO ¸ÖƼÇ÷º½ÌÀ» ÀÌ¿ëÇÑ ´ÙÁß ¿¬°á
3. ¸ÖƼ ¾²·¹µå¸¦ ÀÌ¿ëÇÑ ´ÙÁß ¿¬°á

3°¡ÁöÀÇ ¹æ¹ýÀº ¾î¶² °ÍÀÌ ÁÁ´Ù ³ª»Ú´Ù°í ÇÒ °ÍÀÌ ¾Æ´Ï°í Àû´çÇÑ »óȲÇÏ¿¡¼­ ÀûÁ¤ÇÑ ±â¼úÀ» ÀÌ¿ëÇÏ´Â °ÍÀÌ °ü°ÇÀ̶ó°í ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

1. fork() ÀÌ¿ë ¼Ò½º
[CODE] /** ¸ÖƼ ÇÁ·Î¼¼½º¸¦ ÀÌ¿ëÇÑ ¿¡ÄÚ ¼­¹ö ÇÁ·Î±×·¥ ¸®´ª½º ȯ°æÇÏ¿¡¼­ ÄÄÆÄÀÏ Çϼ¼¿ä. Ãâó : ¿­Ç÷°­ÀÇ TCP/IP **/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <signal.h> #include <arpa/inet.h> #include <sys/types.h> #include <sys/wait.h> #include <sys/socket.h> #define BUFFSIZE 30 void error_handling(const char* message); void z_handler(int sig); int main(int argc, char **argv) { int serv_sock; int clnt_sock; struct sockaddr_in serv_addr; struct sockaddr_in clnt_addr; struct sigaction act; int addr_size, str_len, state; pid_t pid; char message[BUFFSIZE]; if(argc!=2) { printf("USAGE: %s <port>\n", argv[0]); exit(1); } act.sa_handler = z_handler; sigemptyset(&act.sa_mask); act.sa_flags=0; state = sigaction(SIGCHLD, &act, 0); if (state != 0) { puts("sigaction() error!"); exit(1); } serv_sock = socket(PF_INET, SOCK_STREAM, 0); memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); serv_addr.sin_port = htons(atoi(argv[1])); if(bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1) error_handling("bind() error"); if(listen(serv_sock, 5) == -1) error_handling("listen() error"); while(1) { addr_size = sizeof(clnt_addr); clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &addr_size); if (clnt_sock == -1) continue; if ((pid ==fork()) == -1) {   close(clnt_sock);   continue; } else if (pid >0) {   puts("connection success");   close("clnt_sock");   continue; } else {   close(serv_sock);   while( (str_len = read(clnt_sock, message, BUFFSIZE)) != 0) {   write(clnt_sock, message, str_len);   write(1, message, str_len);   }   puts("connection closing");   close(clnt_sock);   exit(0); } } return 0; } void z_handler(int sig) { pid_t pid; int rtn; pid = waitpid(-1, &rtn, WNOHANG); printf("zombi process ID: %d\n", pid); printf("return data : %d\n", WEXITSTATUS(rtn)); } void error_handling(const char* message) { fputs(message, stderr); fputc('\n', stderr); exit(1); } [/CODE]

2. select ÀÌ¿ë ¼Ò½º
[CODE] /** IO ¸ÖƼÇ÷º½ÌÀ» ÀÌ¿ëÇÑ ¿¡ÄÚ ¼­¹ö ÇÁ·Î±×·¥ ¸®´ª½º ȯ°æÇÏ¿¡¼­ ÄÄÆÄÀÏ Çϼ¼¿ä. Ãâó : ¿­Ç÷°­ÀÇ TCP/IP **/ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> #include <sys/types.h> #include <sys/time.h> #include <netinet/in.h> #define BUFFSIZE 100 void error_handling(const char* message); int main(int argc, char **argv) { int serv_sock; struct sockaddr_in serv_addr; fd_set reads, temps; int fd_max; char message[BUFFSIZE]; int str_len; struct timeval timeout; if (argc != 2) { printf("USAGE : %s <port>\n", argv[0]); exit(1); } serv_sock = socket(PF_INET, SOCK_STREAM, 0); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); serv_addr.sin_port = htons(atoi(argv[1])); if (bind(serv_sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr))) error_handling("bind() error"); if (listen(serv_sock, 5) == -1) error_handling("listen() error"); FD_ZERO(&reads); FD_SET(serv_sock, &reads); fd_max = serv_sock; while (1) { int fd, str_len; int clnt_sock, clnt_len; struct sockaddr_in clnt_addr; temps = reads; timeout.tv_sec = 5; timeout.tv_usec = 0; if (select(fd_max + 1, &temps, 0, 0, &timeout) == -1)   error_handling("select() error"); for (fd = 0; fd < fd_max+1; fd++) {   if(fd == serv_sock) {   clnt_len = sizeof(clnt_addr);   clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_len);   FD_SET(clnt_sock, &reads);   if (fd_max < clnt_sock)   fd_max = clnt_sock;   printf("client connection : file descriptor %d\n", clnt_sock);   }   else {   str_len = read(fd, message, BUFFSIZE);   if (str_len == 0) {   FD_CLR(fd, &reads);   close(fd);   printf("client closing: file descriptor %d\n", fd);     }   else {   write(fd, message, str_len);   }   } } } } void error_handling(const char* message) { fputs(message, stderr); fputc('\n', stderr); exit(1); } [/CODE]
ÃßõÃßõ : 547 Ãßõ ¸ñ·Ï
¹øÈ£ Á¦¸ñ
1,046
DTD(Document Type Definition) ¶õ?
´ÙÁß ¿¬°á Çã¿ë ¼­¹öÀÇ ±¸Çö¹ý (socket programming)
1,044
chkdsk (À©µµ¿ì µð½ºÅ©°Ë»ç ¹× º¹±¸)
1,043
Flash Action script
1,042
ÀÎÅͳÝÀͽºÇ÷η¯ ¼¼¼Ç Áߺ¹ »ç¿ëÇϱâ
1,041
ÀÎÅÍ³Ý ÀͽºÇ÷η¯ ¸í·ÉÇà ¿É¼Ç 1
1,040
xml¹®¼­¸¦ Ç÷¡½Ã·Î ºÒ·¯¿À±â
1,039
ÄÄÇ»ÅÍ »ç¿ë½Ã°£ ³ªÅ¸³ªÁö ¾Ê°Ô Çϱâ
1,038
À©µµ ½ÃÀÛ ·Î°í ¾Èº¸ÀÌ°Ô Çϱâ
1,037
<½ÇÇà>¿¡¼­ »ç¿ëÇÏ´Â Æí¸®ÇÑ ¸í·É¾î 1_PING
1,036
<½ÇÇà>¿¡¼­ »ç¿ëÇÏ´Â Æí¸®ÇÑ ¸í·É¾î 2_SHUTDOWN
1,035
<½ÇÇà>¿¡¼­ »ç¿ëÇÏ´Â Æí¸®ÇÑ ¸í·É¾î 3_IPCONFIG
1,034
<½ÇÇà>¿¡¼­ »ç¿ëÇÏ´Â Æí¸®ÇÑ ¸í·É¾î 4_·¹Áö½ºÆ®¸® ÆíÁý±â regedit
1,033
<½ÇÇà>¿¡¼­ »ç¿ëÇÏ´Â Æí¸®ÇÑ ¸í·É¾î 5_À©µµ¿ì ÀÛ¾÷ °ü¸®ÀÚ taskmgr
1,032
<½ÇÇà>¿¡¼­ »ç¿ëÇÏ´Â Æí¸®ÇÑ ¸í·É¾î 6_ÅÚ³Ý(Telnet)
1,031
<½ÇÇà>¿¡¼­ »ç¿ëÇÏ´Â Æí¸®ÇÑ ¸í·É¾î 7_FTP(File Transfer Protocol)
1,030
<½ÇÇà>¿¡¼­ »ç¿ëÇÏ´Â Æí¸®ÇÑ ¸í·É¾î 8_NETSTAT
1,029
<½ÇÇà>¿¡¼­ »ç¿ëÇÏ´Â Æí¸®ÇÑ ¸í·É¾î 9_³» ÄÄÇ»ÅÍ Á¤º¸ È®ÀÎ_cmd_systeminfo
1,028
<½ÇÇà>¿¡¼­ »ç¿ëÇÏ´Â Æí¸®ÇÑ ¸í·É¾î 10_±âŸ À©µµ¿ì Áß¿ä Á¤Ã¥ ½ÇÇà ¸í·É¾î
1,027
Áö±Ý °øÀ¯µÈ ³» ÄÄÇ»ÅÍ¿¡ ´©°¡ Á¢¼ÓÇØ ÀÖ´ÂÁö ¾Æ´Â ¹æ¹ý
1,026
¸¶¿ì½º ¿À¸¥ÂÊ ´ÜÃà¸Þ´º ÆíÁýÇϱâ
1,025
ŸÀÎÀÇ ÀÎÅÍ³Ý »ç¿ë ¸·±â!
1,024
ÀͽºÇ÷η¯¿¡¼­ ÇÑ±Û ÀÔ·ÂÀÌ ¾ÈµÉ¶§
1,023
À©µµ¿ì Ž»ö±â ±âº»Æú´õ À§Ä¡ ¹Ù²ãº¸±â
1,022
¼Ò½ºº¸±â ¸·¾Æ³õÀº°÷ ¼Ò½ºº¸´Â ¹æ¹ý
1,021
'»ç¿ëÀÚ Á¤ÀÇ ´ÜÃàÅ°' ÁöÁ¤Çϱâ
1,020
Å°º¸µåÀÇ Æ¯¼ö¹®ÀÚ ¿µ¾î À̸§
1,019
ÄÄÇ»ÅÍ ½ÃÀÛ ½Ã ¿øÇÏ´Â À½¾ÇÀ» ³ª¿À°Ô ÇÏ·Á¸é...
1,018
ÀÚ½ÅÀÇ ÄÄ¿¡ ¼³Ä¡µÈ ÄÚµ¦À» È®ÀÎÇÏ´Â ¹ý
1,017
³» ³×Æ®¿öÅ© ȯ°æ¿¡ °øÀ¯ ¸ñ·ÏÀÌ ÀÚµ¿ Ãß°¡µÇ´Â °ÍÀ» ¸·±â
¸ñ·Ï
¹ÂÁ÷Æ®·ÎÆ® ºÎ»ê±¤¿ª½Ã ºÎ»êÁø±¸ °¡¾ßµ¿ ¤Ó °³ÀÎÁ¤º¸Ãë±Þ¹æħ
Copyright ¨Ï musictrot All rights reserved.