📄 socket_server.c
字号:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include<sys/ioctl.h>#include<sys/stat.h>#include<fcntl.h>void server(unsigned short int listen_port) { int server_sockfd, client_sockfd; int server_len, client_len; struct sockaddr_in server_address; struct sockaddr_in client_address; int result; char buff_send[]= {"<html>\r\n" "<head>\r\n" "<title></title>\r\n" "</head>\r\n" "<body>\r\n" "<p align=\"center\">welcome to my website</p>\r\n" "<h3 align=\"center\"><a href=\"Default.htm\">happy family</a></h3>\r\n" "<p>end</p>\r\n" "<p></p>\r\n" "</body></html>\r\n\r\n"}; //这是静态页面 fd_set readfds, testfds; server_sockfd = socket(AF_INET, SOCK_STREAM, 0); server_address.sin_family = AF_INET; server_address.sin_addr.s_addr = htonl(INADDR_ANY); server_address.sin_port = htons(listen_port); server_len = sizeof (server_address); //服务器绑定地址和端口 bind(server_sockfd,(struct sockaddr *)&server_address,server_len); //创建监听队列 listen(server_sockfd, 5); FD_ZERO(&readfds); FD_SET(server_sockfd, &readfds); //服务器处理客户端请求 while (1) { int fd; int nread; testfds = readfds; printf("Server waiting\n"); //服务器等待响应 result = select(FD_SETSIZE, &testfds, (fd_set *) 0, (fd_set *) 0, (struct timeval *) 0); if (result < 1) { perror("Server error\n"); exit(1); } //循环处理所有的响应 for (fd = 0; fd < FD_SETSIZE; fd++) { if (FD_ISSET(fd, &testfds)) { if (fd == server_sockfd) { //为客户端新建连接 client_len = sizeof (client_address); client_sockfd = accept(server_sockfd, (struct sockaddr *) & client_address, &client_len); FD_SET(client_sockfd, &readfds); printf("server adding client on fd %d.\n", client_sockfd); } else { ioctl(fd, FIONREAD, &nread); if (nread == 0) { //断开连接 close(fd); FD_CLR(fd, &readfds); printf("server removing client on fd %d\n", fd); } else { //传输文件 char ch; recv(client_sockfd,&ch,1,0); if(ch!='G')return;//判断是否为GET请求 send(client_sockfd,buff_send,sizeof(buff_send),0);//发送页面 close(fd); FD_CLR(fd,&readfds); } } } } }}int main(int argc, char** argv) { server(9999); return (EXIT_SUCCESS);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -