A deep dive into tiny servers

Jul 21, 2017 pm 04:47 PM
server

  最近学习到了《深入理解计算机系统》的第11章网络编程,在最后一节是一个名为Tiny的小型web服务器的实现,源代码书中已经给出,这里就不再复制粘贴了。这篇小博客主要记录一下课后题10的解答。原题目为:
     写出CGI adder函数的HTML表单。你的表单应该包括两个文本框,用户将需要相加的两个数字填在这两个文本框中。你的表单应该使用GET方法请求内容。
     因为我以前没接触过HTML表单,先百度之,找到了w3school的HTML教材,看了一下表单的部分,写出了一个很简单的小表单,命名为index.html:

 1 <!DOCTYPE html> 2 <html> 3 <body> 4  5 <p> 6 please enter two numbers:<br> 7 </p> 8  9 <form action="/cgi-bin/adder">10   The first number:11   <input type="number" name="num1"> <br>12   The second number:13   <input type="number" name="num2"> <br>14   <input type="submit" value="Submit">15 </form>16 17 </body>18 </html>
Copy after login

  这是输入localhost:8888之后浏览器显示的效果图。8888是我设置的tiny的端口,至于为什么没有后边的/index.html,是因为我在源代码中将index.html设为了主界面。

  我们可以随便输入两个数字,点击Submit按钮,结果肯定是不对的。。

  如上图所示,结果显示的是0。注意在该网页的地址栏处,我们看到"localhost:8888/cgi-bin/adder?num1=22&num2=22",看过tiny源码我们就会知道,adder.c所要分析的数据是在&符号两边的纯数字,也就是说,要想正确的被adder.c程序求和,地址栏应该显示"localhost:8888/cgi-bin/adder?22&22"才对。出现上图中的错误的原因就是,adder程序没有取得两个参数的数值大小。解决方法很简单,只需要在adder.c程序里把两个数字取出来就行了,整个adder.c代码如下所示:

 1 #include "net.h" 2  3 int main(void) 4 { 5     char *buf, *p; 6     char arg1[MAXLINE], arg2[MAXLINE], content[MAXLINE]; 7     char tmp[MAXLINE]; 8     int n1 = 0, n2 = 0; 9 10     if ( (buf = getenv("QUERY_STRING")) != NULL) {11         p = strchr(buf, '&');12         *p = '\0';13 14         strcpy(arg1, buf);15         strcpy(arg2, p+1);16 17         //用来取出两个参数的代码18         p = strchr(arg1, '=');19         strcpy(arg1, p+1);20         p = strchr(arg2, '=');21         strcpy(arg2, p+1);22 23         n1 = atoi(arg1);24         n2 = atoi(arg2);25     }26 27     sprintf(content, "QUERY_STRING = %s", buf);28     sprintf(content, "Welcome to add.com: ");29     //sprintf(content, "arg1=%s, arg2=%s\n", arg1, arg2);  调试输出参数30     sprintf(content, "%sThe Internet addition portal.\r\n<p>", content);31     sprintf(content, "%sThe answer is: %d + %d = %d\r\n<p>",32             content, n1, n2, n1 + n2);33     sprintf(content, "%sThanks for visiting!\r\n", content);34 35     //generate the http response36     printf("Connection: close\r\n");37     printf("Content-length: %d\r\n", (int)strlen(content));38     printf("Content-type: text/html\r\n\r\n");39     printf("%s", content);40     fflush(stdout);41 42     exit(0);43 }
Copy after login

  重新编译adder.c之后,我们再次在浏览器输入网址:localhost:8888,输入两个数字,结果如图:

  至此,我们学习Tiny的第一阶段就算完成了,完成了课后题11.10的要求,能够处理来自浏览器的静态请求和动态请求。但是,由于我们的Tiny一次只能处理一个连接,效率太低了。下一节我们就要对Tiny进行一下改进,使其能够支持并发处理。

The above is the detailed content of A deep dive into tiny servers. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to solve the problem that eMule search cannot connect to the server How to solve the problem that eMule search cannot connect to the server Jan 25, 2024 pm 02:45 PM

Solution: 1. Check the eMule settings to make sure you have entered the correct server address and port number; 2. Check the network connection, make sure the computer is connected to the Internet, and reset the router; 3. Check whether the server is online. If your settings are If there is no problem with the network connection, you need to check whether the server is online; 4. Update the eMule version, visit the eMule official website, and download the latest version of the eMule software; 5. Seek help.

Solution to the inability to connect to the RPC server and the inability to enter the desktop Solution to the inability to connect to the RPC server and the inability to enter the desktop Feb 18, 2024 am 10:34 AM

What should I do if the RPC server is unavailable and cannot be accessed on the desktop? In recent years, computers and the Internet have penetrated into every corner of our lives. As a technology for centralized computing and resource sharing, Remote Procedure Call (RPC) plays a vital role in network communication. However, sometimes we may encounter a situation where the RPC server is unavailable, resulting in the inability to enter the desktop. This article will describe some of the possible causes of this problem and provide solutions. First, we need to understand why the RPC server is unavailable. RPC server is a

Detailed explanation of CentOS installation fuse and CentOS installation server Detailed explanation of CentOS installation fuse and CentOS installation server Feb 13, 2024 pm 08:40 PM

As a LINUX user, we often need to install various software and servers on CentOS. This article will introduce in detail how to install fuse and set up a server on CentOS to help you complete the related operations smoothly. CentOS installation fuseFuse is a user space file system framework that allows unprivileged users to access and operate the file system through a customized file system. Installing fuse on CentOS is very simple, just follow the following steps: 1. Open the terminal and Log in as root user. 2. Use the following command to install the fuse package: ```yuminstallfuse3. Confirm the prompts during the installation process and enter `y` to continue. 4. Installation completed

How to configure Dnsmasq as a DHCP relay server How to configure Dnsmasq as a DHCP relay server Mar 21, 2024 am 08:50 AM

The role of a DHCP relay is to forward received DHCP packets to another DHCP server on the network, even if the two servers are on different subnets. By using a DHCP relay, you can deploy a centralized DHCP server in the network center and use it to dynamically assign IP addresses to all network subnets/VLANs. Dnsmasq is a commonly used DNS and DHCP protocol server that can be configured as a DHCP relay server to help manage dynamic host configurations in the network. In this article, we will show you how to configure dnsmasq as a DHCP relay server. Content Topics: Network Topology Configuring Static IP Addresses on a DHCP Relay D on a Centralized DHCP Server

Best Practice Guide for Building IP Proxy Servers with PHP Best Practice Guide for Building IP Proxy Servers with PHP Mar 11, 2024 am 08:36 AM

In network data transmission, IP proxy servers play an important role, helping users hide their real IP addresses, protect privacy, and improve access speeds. In this article, we will introduce the best practice guide on how to build an IP proxy server with PHP and provide specific code examples. What is an IP proxy server? An IP proxy server is an intermediate server located between the user and the target server. It acts as a transfer station between the user and the target server, forwarding the user's requests and responses. By using an IP proxy server

How to check server status How to check server status Oct 09, 2023 am 10:10 AM

Methods to view server status include command line tools, graphical interface tools, monitoring tools, log files, and remote management tools. Detailed introduction: 1. Use command line tools. On Linux or Unix servers, you can use command line tools to view the status of the server; 2. Use graphical interface tools. For server operating systems with graphical interfaces, you can use the graphics provided by the system. Use interface tools to view server status; 3. Use monitoring tools. You can use special monitoring tools to monitor server status in real time, etc.

How to enable TFTP server How to enable TFTP server Oct 18, 2023 am 10:18 AM

The steps to start the TFTP server include selecting the TFTP server software, downloading and installing the software, configuring the TFTP server, and starting and testing the server. Detailed introduction: 1. When choosing TFTP server software, you first need to choose the TFTP server software that suits your needs. Currently, there are many TFTP server software to choose from, such as Tftpd32, PumpKIN, tftp-hpa, etc., which all provide simple and easy-to-use functions. interface and configuration options; 2. Download and install TFTP server software, etc.

What should I do if I can't enter the game when the epic server is offline? Solution to why Epic cannot enter the game offline What should I do if I can't enter the game when the epic server is offline? Solution to why Epic cannot enter the game offline Mar 13, 2024 pm 04:40 PM

What should I do if I can’t enter the game when the epic server is offline? This problem must have been encountered by many friends. When this prompt appears, the genuine game cannot be started. This problem is usually caused by interference from the network and security software. So how should it be solved? The editor of this issue will explain I would like to share the solution with you, I hope today’s software tutorial can help you solve the problem. What to do if the epic server cannot enter the game when it is offline: 1. It may be interfered by security software. Close the game platform and security software and then restart. 2. The second is that the network fluctuates too much. Try restarting the router to see if it works. If the conditions are OK, you can try to use the 5g mobile network to operate. 3. Then there may be more

See all articles