단순 순환 서버 구현

4037 단어
간단한 socket 흔히 볼 수 있는 인터페이스의 기본 사용법동기식 차단 모형.
  • 클라이언트 섹션:
  • 
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include 
    #include
    
    #define MAXLINE 4096
    
    int main(int argc, char** argv)
    {
        int    sockfd, n,rec_len;
        char    recvline[4096], sendline[4096];
        char    buf[MAXLINE];
        struct sockaddr_in    servaddr;
        // 
        if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){
            printf("create socket error: %s(errno: %d)
    ", strerror(errno),errno); exit(0); } // servaddr , 0 memset(&servaddr, 0, sizeof(servaddr)); // servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); servaddr.sin_port = htons(8000); // servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//IP INADDR_ANY, IP 。 // if( connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0){ printf("connect error: %s(errno: %d)
    ",strerror(errno),errno); exit(0); } printf("send msg to server:
    "); fgets(sendline, 4096, stdin); // if( send(sockfd, sendline, strlen(sendline), 0) < 0) { printf("send msg error: %s(errno: %d)
    ", strerror(errno), errno); exit(0); } // if((rec_len = recv(sockfd, buf, MAXLINE,0)) == -1) { perror("recv error"); exit(1); } buf[rec_len] = '\0'; printf("Received : %s ",buf); // close(sockfd); exit(0); }

    2. 서버 섹션:
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include 
    #include 
    #define DEFAULT_PORT 8000
    #define MAXLINE 4096
    int main(int argc, char** argv)
    {
        int    socket_fd, connect_fd;
        struct sockaddr_in     servaddr, remotaddr;
        char    buff[4096];
        int     n;
        // Socket
        if( (socket_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ){
            printf("create socket error: %s(errno: %d)
    ",strerror(errno),errno); exit(0); } // memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//IP INADDR_ANY, IP 。 servaddr.sin_port = htons(DEFAULT_PORT);// DEFAULT_PORT servaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); // if( bind(socket_fd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){ printf("bind socket error: %s(errno: %d)
    ",strerror(errno),errno); exit(0); } // if( listen(socket_fd, 10) == -1){ printf("listen socket error: %s(errno: %d)
    ",strerror(errno),errno); exit(0); } printf("==========waiting for client's request==========
    "); while(1){ // , CPU 。sizeof(struct sockaddr) socklen_t addrsize = sizeof(struct sockaddr); if((connect_fd = accept(socket_fd, (struct sockaddr*)&remotaddr, &addrsize)) == -1){ if (errno == EINTR) continue; else printf("accept socket error: %s(errno: %d)
    ",strerror(errno),errno); continue; } printf("accept from ip: %s
    ", inet_ntoa(remotaddr.sin_addr)); // n = recv(connect_fd, buff, MAXLINE, 0); buff[n] = '\0'; // if(!fork()){ /* */ if(send(connect_fd, buff, sizeof(buff),0) == -1) perror("send error
    "); close(connect_fd); exit(0); } printf("recv msg from client: %s
    ", buff); close(connect_fd); } close(socket_fd); }

    좋은 웹페이지 즐겨찾기