1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| int main(int argc, char* argv[]) { int listenfd, connfd, n; pid_t pid; sockaddr_in serveraddr{0}, clientaddr{0}; socklen_t size; char buff[MAXLINE]; char address[MAXLINE]; time_t ticks; listenfd = Socket(AF_INET, SOCK_STREAM, 0); bzero(&serveraddr, sizeof(serveraddr)); serveraddr.sin_family = AF_INET; serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); serveraddr.sin_port = htons(8080); inet_ntop(AF_INET, &serveraddr.sin_addr, address, sizeof(serveraddr)); printf("server address: %s\n", address); fflush(stdout); Bind(listenfd, (sockaddr*)&serveraddr, sizeof(serveraddr)); Listen(listenfd, LISTENQ); while (true) { size = sizeof(clientaddr); connfd = Accept(listenfd, (sockaddr*)&clientaddr, &size); if ((pid = fork()) == 0) { inet_ntop(AF_INET, &clientaddr.sin_addr, address, size); printf("connect from %s, child process %d processing\n", address, getpid()); while ((n = read(connfd, buff, MAXLINE)) > 0) { printf("pid %d, client send %d byes: %s\n",getpid(), n, buff); Write(connfd, buff, strlen(buff) + 1); } if (n < 0) err_sys("read error"); printf("connect to client %s closed\n\n", address); Close(connfd); exit(0); } Close(connfd); } }
|