📄 server.c
字号:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <errno.h>#include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <sys/wait.h>#include <signal.h>#define MYPORT 3490#define BACKLOG 10void sigchld_handler(int s){ while(wait(NULL)>0);}int main(void){ int sockfd,sin_size,yes=1,new_fd; struct sockaddr_in server_addr; struct sockaddr_in clients_addr; struct sigaction sa;// char buf[MAXBUFLEN]; if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) { perror("socket"); exit(1); } if(setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int))==-1) { perror("setsocopt"); exit(1); } server_addr.sin_family=AF_INET; server_addr.sin_port=htons(MYPORT); server_addr.sin_addr.s_addr=INADDR_ANY; memset(&(server_addr.sin_zero),'\0',8); if(bind(sockfd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr))==-1) { perror("bind"); exit(1); } if(listen(sockfd,BACKLOG)==-1) { perror("listen"); exit(1); } sa.sa_handler=sigchld_handler; sigemptyset(&sa.sa_mask); sa.sa_flags=SA_RESTART; if(sigaction(SIGCHLD,&sa,NULL)==-1) { perror("sigaction"); exit(1); } while(1) { sin_size=sizeof(struct sockaddr_in); if((new_fd=accept(sockfd,(struct sockaddr *)&clients_addr,&sin_size))==-1) { perror("accept"); continue; } printf("server:got connection from %s\n",inet_ntoa(clients_addr.sin_addr)); if(!vfork()) { printf("Hello!\n"); if(send(new_fd,"Hello,world!\n",13,0)==-1) { perror("send"); close(new_fd); exit(1); } close(new_fd); } } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -