📄 server.c
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <unistd.h>#include <signal.h>#include <netinet/in.h>#include <arpa/inet.h>#include <sys/types.h>#include <sys/socket.h>#define MAXLINE 256void serve_client(int fd, struct sockaddr_in *cli){ char buf[MAXLINE]; char str[INET_ADDRSTRLEN]; int i, len; while (read(fd, buf, MAXLINE)) { printf("receiv from client %s at port %d: %s", inet_ntop(PF_INET, &(cli->sin_addr), str, sizeof(str)), ntohs(cli->sin_port), buf); len = strlen(buf); for (i=0; i<len; i++) buf[i] = toupper(buf[i]); write(fd, buf, len+1); } printf("close client at port %d\n", ntohs(cli->sin_port)); close(fd);}int main(){ struct sockaddr_in serv, cli; int listenfd, connectfd; pid_t pid; signal(SIGCHLD, SIG_IGN); bzero(&serv, sizeof(serv)); serv.sin_family = PF_INET; serv.sin_port = htons(8000); serv.sin_addr.s_addr = htonl(INADDR_ANY); listenfd = socket(PF_INET, SOCK_STREAM, 0); bind(listenfd, (struct sockaddr *)&serv, sizeof(serv)); listen(listenfd, 100); printf("Accepting connection...\n"); while (1) { socklen_t clilen = sizeof(cli); bzero(&cli, sizeof(cli)); connectfd = accept(listenfd, (struct sockaddr *)&cli, &clilen); pid = fork(); if (pid<0) { perror("fork"); exit(1); } else if (pid) close(connectfd); /* parent */ else { /* child */ close(listenfd); serve_client(connectfd, &cli); exit(1); } } exit(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -