⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 socket_server.c

📁 socket实现网络通信的一个简单实现 socket实现网络通信的一个简单实现
💻 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 + -