#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main(int argc, char *argv[]){
    int fd, new_fd, struct_len, numbytes;
    struct sockaddr_in server_addr; // 定义在netinet/in.h
    struct sockaddr_in client_addr;
    char buff[BUFSIZ];//BUFSIZ定义在stdio.h，默认8192

    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(8000);
    server_addr.sin_addr.s_addr = INADDR_ANY;
    bzero(&(server_addr.sin_zero), 8);
    struct_len = sizeof(struct sockaddr_in);

    fd = socket(AF_INET, SOCK_STREAM, 0); // 创建一个TCP类型的socket
    
    while(bind(fd, (struct sockaddr *)&server_addr, struct_len) == -1);
        printf("Bind Success!\n");
        
    while(listen(fd, 10) == -1);
        printf("Listening(%d)....\n", fd);
        
    printf("Ready for Accept...\n");
    
    while( new_fd = accept(fd, (struct sockaddr *)&client_addr, &struct_len) ){
        printf("Get the New Client: %d\n", new_fd);
    
        numbytes = send(new_fd,"Welcome to my server\n",21,0);
        
        while((numbytes = recv(new_fd, buff, BUFSIZ, 0)) > 0)
        {
            buff[numbytes] = '\0';
            printf("%s\n",buff);
                if(send(new_fd,buff,numbytes,0)<0)
                {
                    perror("write");
                    return 1;
                }
        }
        close(new_fd);
    }
    
    close(fd);
    return 0;
}
