/* * echo_server.c * Written by Jonghwa Park */ #include #include #include #include #include #include #include #define BUFSIZE 1024 void error_handling(char *message); int main(int argc, char *argv[]) { int serv_sock; //¼­¹ö ¼ÒÄÏ µð½ºÅ©¸³ÅÍ int clnt_sock; //Ŭ¶óÀ̾ðÆ® ¼ÒÄÏ µð½ºÅ©¸³ÅÍ char message[BUFSIZE]={0}; int str_len; struct sockaddr_in serv_addr; //¼­¹ö ÁÖ¼ÒÁ¤º¸ ±¸Á¶Ã¼ struct sockaddr_in clnt_addr; //Ŭ¶óÀ̾ðÆ® ÁÖ¼ÒÁ¤º¸ ±¸Á¶Ã¼ int clnt_addr_size; //Ŭ¶óÀ̾ðÆ® ÁÖ¼Ò Å©±â char * serv_ip = "210.93.99.64"; if (argc != 2) { printf("Usage: %s \n",argv[0]); exit(1); } /* PF_INT : IPv4 ÇÁ·ÎÅäÄÝ »ç¿ë 1. SOCK_STREAM : ¿¬°áÁöÇâÇü ¼ÒÄÏ(TCP) 2. SOC_DGRAM : ºñ¿¬°áÁöÇâÇü ¼ÒÄÏ(UDP) 3. IPPROTO_TCP, OPPROTO_UDP */ serv_sock = socket(PF_INET, SOCK_STREAM, 0); //¼­¹ö ¼ÒÄÏ »ý¼º if (serv_sock == -1) error_handling("socket() error"); printf("¼­¹ö ¼ÒÄÏ »ý¼º : ¼ÒÄÏ Descriptor = %d\n", serv_sock); memset(&serv_addr, 0, sizeof(serv_addr)); //0·Î ÃʱâÈ­ /* ¼­¹ö ÁÖ¼ÒÁ¤º¸ ¼³Á¤ 1. sin_family : ÁÖ¼Ò Ã¼°è 2. sin_addr.s_addr : 32 bit Ipv4 ÀÎÅÍ³Ý ÁÖ¼Ò 3. sin_port : ¼­¹ö Æ÷Æ® ¼³Á¤ */ serv_addr.sin_family= AF_INET;//ipv4; serv_addr.sin_addr.s_addr = inet_addr(serv_ip); // serv_addr.sin_port = htons(atoi(argv[1])); // if (bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1) // error_handling("bind() error"); printf("¼ÒÄÏ ÁÖ¼Ò ÇÒ´ç : bind ÇÔ¼ö ¼öÇà ¿Ï·á\n"); printf("¼ÒÄÏ ÁÖ¼Ò Á¤º¸ : serv_addr.sin_family = %d\n",serv_addr.sin_family); printf("¼ÒÄÏ ÁÖ¼Ò Á¤º¸ : serv_addr.sin_addr.s_addr = %s\n",inet_ntoa(serv_addr.sin_addr)); printf("¼ÒÄÏ ÁÖ¼Ò Á¤º¸ : serv_addr.sin_port = %d\n",ntohs(serv_addr.sin_port)); if (listen(serv_sock, 5) == -1) // error_handling("listen() error"); printf("¿¬°á ¿äû ´ë±â »óÅ ÁøÀÔ\n"); clnt_addr_size = sizeof(clnt_addr); /* ¼­¹ö ¼ÒÄÏÀÌ Å¬¶óÀ̾ðÆ®¿ÍÀÇ ¿¬°áÀ» À§ÇÑ »õ·Î¿î ¼ÒÄÏÀ» Çϳª ¸¸µé¾î ÁØ´Ù */ clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size); // if (clnt_sock == -1) error_handling("accept() error"); printf("Ŭ¶óÀ̾ðÆ® Á¢¼Ó\n"); printf("Ŭ¶óÀ̾ðÆ® ÁÖ¼Ò : %s\n",inet_ntoa(clnt_addr.sin_addr)); // printf("Ŭ¶óÀ̾ðÆ® Æ÷Æ®: %d\n",ntohs(clnt_addr.sin_port)); // /* µ¥ÀÌÅÍ ¼ö½Å ¹× Àü¼Û */ while((str_len=read(clnt_sock,message,BUFSIZE)) != 0) { printf("Ŭ¶óÀ̾ðÆ®¿ÀºÎÅÍ ¹ÞÀº µ¥ÀÌÅÍ\n"); printf("%s\n", message); write(clnt_sock, message, str_len); // printf("Ŭ¶óÀ̾ðÆ®¿¡ µ¥ÀÌÅÍ Àü¼Û\n"); write(1, message, str_len); // memset(message,0,BUFSIZE); } close(clnt_sock); printf("Ŭ¶óÀ̾ðÆ® ¼ÒÄÏ Á¾·á\n"); /* Iterative Server for (; ; ) { clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size); // if (clnt_sock== -1) { error_handling("accept() error"); break; } printf("====================================================\n"); printf("Ŭ¶óÀ̾ðÆ® Á¢¼Ó\n"); printf("Ŭ¶óÀ̾ðÆ® ÁÖ¼Ò : %s\n",inet_ntoa(clnt_addr.sin_addr)); // printf("Ŭ¶óÀ̾ðÆ® Æ÷Æ® : %d\n",ntohs(clnt_addr.sin_port)); // write(clnt_sock, message, sizeof(message)); // printf("Ŭ¶óÀ̾ðÆ®¿¡°Ô µ¥ÀÌÅÍ Àü¼Û\n"); printf("Ŭ¶óÀ̾ðÆ® ¿¬°á ¼ÒÄÏ Á¾·á ¼ÒÄÏ ¹øÈ£ %d\n", clnt_sock); close(clnt_sock); // } */ return 0; } void error_handling(char *message) { fputs(message, stderr); fputc('\n',stderr); exit(1); }