C语言socket 网络代写 COMP1521 HTTP

 Week 09 Lab Exercise

Objectives

to learn about HTTP
to practice working with sockets

Admin

Grades Demo Submit Deadline

Week 09 Lab Exercise

A Minimal Web Server

Computer System Fundamentals

A+=outstanding, A=very good, B=adequate, C=sub-standard, D=hopeless in the Week09 Lab or at the start of the Week03 Lab
give cs1521 lab09 server.c or via WebCMS
must be submitted by 11:59pm Sunday 23 September

Note: you need to do something truly outstanding, above and beyond the “call of duty” to get A+. Doing the exercise well and correctly as specified will get you an A grade. An A grade gets you full marks; an A+ grade gives a small bonus.

Background Setting Up

Make a new directory for this lab, change into that directory, and run the command:

To work on this at home, download the ZIP file and unzip it on your own machine. You should be able to get a web server working on most implementations of Unix. It works on Linux and MacOS, at least, but no guarantees about other systems.

The unzip command will place the following files in you directory Makefile a set of dependencies used to control compilation

server.c a small skeleton program for the warm-up exercise
The main task for this lab is to build a minimal web server that can run on your local machine (e.g. a

CSE workstation) and can interact with a web server running on the same machine.

You should read the code in theserver.c file to work out what needs to be done (look for TODO). You might recognise much of the code in the main() function from one of the examples in the Week08 Lectures. See if you can remember what all of the parameters and data types were for the various socket functions; or at least recall the general method for setting up a socket on a server: create a socket, bind it to an address (host+port), start it listening, accept connections.

You can use the Makefile to compile the server (and it will give compile errors until you fix it). When it’s executable, you run the server in one terminal window and send requests to it either from another terminal window (using the curl command) or from a web browser running on the same machine as the server. You can use the output appearing in the terminal where the server is running for debugging.

An example of running the server, and the kind of output you might see:

$

$
WebServer: waiting for connections...
... the server will wait here ...

https://cgi.cse.unsw.edu.au/~cs1521/18s2/labs/week09/index.php 1/3

piz.90bal/90keew/sbal/2s81/bew/1251sc/emoh/ piznu

revresbew/.

2018/9/16 COMP1521 18s2 – Week 09 Lab Exercise

Note: if you leave your webserver running and someone else comes to use the workstation, or even if you try to run it again, you will receive the error message:

and your server won’t start. If it’s your webserver that’s causing this, simply kill it. If some other inconsiderate person has left their server running, you can try to get around this by using a different port number. You will need to change it in the code, then recompile, and then use different URLs to the ones below (using the new port number).

Exercise

The server.c files contains a partially complete implementation of a web server. The server runs on the local host and writes logging/debugging information on its standard output. You need to complete it so that it can respond to the following HTTP requests:

$
WebServer: binding socket: Address already in use

Request

Response

http://localhost:3490/

Server running …

http://localhost:3490/hello

Hello

http://localhost:3490/hello?John

Hello, John!

http://localhost:3490/date

Sat Sep 15 16:35:44 2018

http://localhost:3490/xyz

404 Page Not Found

Obviously, we don’t always want the same date as above. You need to extract the current date/time and render that as a character string. The library functions time() and ctime() will help; read the man entries to find out how they work.

Similarly, we don’t always want the name John. The server should return an appropriate response whatever name is supplied. You can use the sscanf() function to extract the name, or do it some other way if you wish.

Note that if you test the server using curl, you will see the logging and debugging information intermingled with the HTTP response on your terminal. If you send requests through a web browser, you will see the responses (once your server is working) in the browser’s window.

Challenge exercises

   ... until it receives a request ...
   ... at which point it will display ...
WebServer: got connection
Request: GET /hello HTTP/1.1
   ... after processing the request ...
   ... the server will wait here ...
   ... until it receives a another request ...
   ... etc. etc. etc. ...

https://cgi.cse.unsw.edu.au/~cs1521/18s2/labs/week09/index.php 2/3

revresbew/.

2018/9/16 COMP1521 18s2 – Week 09 Lab Exercise

Make the webserver handle other HTTP operations, such as POST and PUT.

Submission

You need to submit one file: server.c. You can submit this via the command line using give or you can submit it from within WebCMS. After submitting the code, show your tutor, who’ll give you feedback on your work and award a grade.

Have fun, jas

https://cgi.cse.unsw.edu.au/~cs1521/18s2/labsweek09/index.php 3/3