📄 shttps.c
字号:
/* * Very Simple HTTP Server * * ./software/ch7/shttps/shttps.c * * mtj@cogitollc.com * */#include <sys/socket.h>#include <arpa/inet.h>#include <stdio.h>#include <time.h>#include <unistd.h>#define MAX_BUFFER 512#define HTTP_SERVER_PORT 80int main ( void ){ int serverFd, connectionFd, on=1; struct sockaddr_in servaddr; char timebuffer[MAX_BUFFER+1]; time_t currentTime; const char *page= {"HTTP/1.0 200 OK\nContent-Type: text/html\n\n" "<HTML><HEAD><TITLE>Welcome</TITLE></HEAD>" "<BODY><H1>Welcome!</H1><P><P>" "The current time at this device is %s<P>" "</BODY></HTML>\n"}; serverFd = socket(AF_INET, SOCK_STREAM, 0); setsockopt(serverFd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(HTTP_SERVER_PORT); bind(serverFd, (struct sockaddr *)&servaddr, sizeof(servaddr)); listen(serverFd, 5); while ( 1 ) { connectionFd = accept(serverFd, (struct sockaddr *)NULL, NULL); if (connectionFd >= 0) { read(connectionFd, timebuffer, MAX_BUFFER); currentTime = time(NULL); snprintf(timebuffer, MAX_BUFFER, page, ctime(¤tTime)); write(connectionFd, timebuffer, strlen(timebuffer)); close(connectionFd); } }}/* * Copyright (c) 2002 Charles River Media. All rights reserved. * * Redistribution and use in source and binary forms, with or * without modification, is hereby granted without fee provided * that the following conditions are met: * * 1. Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * 2. Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * 3. Neither the name of Charles River Media nor the names of * its contributors may be used to endorse or promote products * derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY CHARLES RIVER MEDIA AND CONTRIBUTERS * 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CHARLES * RIVER MEDIA OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARAY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -