#include #include #define BUFSIZE 100 #pragma comment(lib, "ws2_32.lib") int main(int argc, char** argv){ WSADATA wsaData; SOCKET hServSock; SOCKADDR_IN servAddr; int arrIndex; int clntLen; SOCKET hClntSock; SOCKADDR_IN clntAddr; fd_set reads, tmps; char message[BUFSIZE]; int strLen; TIMEVAL timeout; if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) fputs("WSADStartup() error", stderr); hServSock = socket(PF_INET, SOCK_STREAM, 0); if(hServSock == INVALID_SOCKET) fputs("socket() error", stderr); argv[1] = "19999"; memset(&servAddr, 0, sizeof(servAddr)); servAddr.sin_addr.s_addr = htonl(INADDR_ANY); servAddr.sin_port = htons(atoi(argv[1])); servAddr.sin_family = AF_INET; if(bind(hServSock, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR) fputs("bind() error", stderr); if(listen(hServSock, 5) == SOCKET_ERROR) fputs("listen() error", stderr); FD_ZERO(&reads); FD_SET(hServSock, &reads); //hServSockÀ» ÅëÇØ µé¾î¿À´Â °ÍÀÎÁö È®ÀÎ while(1){ tmps = reads; timeout.tv_sec = 5; timeout.tv_usec = 0; //´ë±âÇϰí ÀÖ´Ù°¡ º¯È­°¡ ÀÖÀ¸¸é ¸®ÅÏ if(select(0, &tmps, 0, 0, &timeout) == SOCKET_ERROR) fputs("select() error", stderr); //¸ðµç ¼ÒÄÏ ÇÚµéÀ» ¼øÈ¸. for(arrIndex = 0; arrIndex < (int)reads.fd_count; arrIndex++){ if(FD_ISSET(reads.fd_array[arrIndex], &tmps)){ //¿¬°á ¿äûÀÎ °æ¿ì if(tmps.fd_array[arrIndex] == hServSock){ clntLen = sizeof(clntAddr); hClntSock = accept(hServSock, (SOCKADDR*)&clntAddr, &clntLen); //¿¬°áÀÌµÈ Å¬¶óÀÌ¾ðÆ®¸¦ FD_SET¿¡ Ãß°¡. FD_SET(hClntSock, &reads); printf("Ŭ¶óÀÌ¾ðÆ® ¿¬°á : ¼ÒÄÏ ÇÚµé %d \n", hClntSock); }else{ //Àü¼ÛµÈ µ¥ÀÌÅͰ¡ Á¸ÀçÇÏ´Â °æ¿ì. Á¾·á ¿äû ȤÀº µ¥ÀÌÅÍ ¼ö½Å. strLen = recv(tmps.fd_array[arrIndex], message, BUFSIZE-1, 0); if(strLen == 0){ //Á¾·á ¿äûÀÇ °æ¿ì. FD_CLR(tmps.fd_array[arrIndex], &reads); closesocket(tmps.fd_array[arrIndex]); printf("Ŭ¶óÀÌ¾ðÆ® Á¾·á : ¼ÒÄÏ ÇÚµé %d \n", tmps.fd_array[arrIndex]); }else{ //µ¥ÀÌÅÍ ¼ö½ÅÀÇ °æ¿ì. send(tmps.fd_array[arrIndex], message, strLen, 0); } //else } //else } //if } //for } //while WSACleanup(); return 0; } //main //#include //#include //#include // //#pragma comment(lib, "ws2_32.lib") // //#define BUFSIZE 100 // //void ErrorHandling(char *message); // //int main(int argc, char **argv) //{ // WSADATA wsaData; // SOCKET hServSock; // SOCKADDR_IN servAddr; // // int arrIndex; // int clntLen; // SOCKET hClntSock; // SOCKADDR_IN clntAddr; // // fd_set reads, temps; // // char message[BUFSIZE]; // int strLen; // TIMEVAL timeout; // // /*if(argc != 2) // { // exit(1); // }*/ // // if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) // ErrorHandling("e"); // // hServSock = socket(PF_INET, SOCK_STREAM, 0); // // if(hServSock == INVALID_SOCKET) // ErrorHandling("e"); // // servAddr.sin_family = AF_INET; // servAddr.sin_addr.s_addr = htonl(INADDR_ANY); // servAddr.sin_port = 19999; // // if(bind(hServSock, (SOCKADDR*)&servAddr, sizeof(servAddr))==SOCKET_ERROR) // ErrorHandling("e"); // // if(listen(hServSock, 5)==SOCKET_ERROR) // ErrorHandling("e"); // // FD_ZERO(&reads); // FD_SET(hServSock, &reads); // // printf("-1\n"); // // while(1) // { // temps = reads; // timeout.tv_sec = 5; // timeout.tv_usec = 0; // // if(select(0, &temps, 0, 0, &timeout) == SOCKET_ERROR) // ErrorHandling("e"); // // for(arrIndex=0; arrIndex < reads.fd_count; arrIndex++) // { // printf("1\n"); // if(FD_ISSET(reads.fd_array[arrIndex], &temps)) // { // printf("2\n"); // if(reads.fd_array[arrIndex]==hServSock) // { // clntLen = sizeof(clntAddr); // hClntSock = accept(hServSock, (SOCKADDR*)&clntAddr, &clntLen); // FD_SET(hClntSock, &reads); // printf("Ŭ¶óÀÌ¾ðÆ® ¿¬°á : ¼ÒÄÏ ÇÚµé %d \n", hClntSock); // } // else // { // strLen = recv(reads.fd_array[arrIndex], message, BUFSIZE-1, 0); // if(strLen == 0) // { // closesocket(temps.fd_array[arrIndex]); // //printf("Ŭ¶óÀÌ¾ðÆ® Á¾·á : ¼ÒÄÏ ÇÚµé %d \n", reads.fd_array[arrIndex]); // printf("Ŭ¶óÀÌ¾ðÆ® Á¾·á : ¼ÒÄÏ ÇÚµé\n"); // FD_CLR(reads.fd_array[arrIndex], &reads); // // } // else // { // send(reads.fd_array[arrIndex], message, strLen, 0); // } // } // } // } // } // WSACleanup(); // return 0; //} // //void ErrorHandling(char *message) //{ // fputs(message, stderr); // fputc('\n', stderr); // exit(1); //}