[ Team LiB ] Previous Section Next Section

5.13 Exercises

Exercise 5-1. Using the URLConnection techniques demonstrated in Example 5-2, write a program that prints the modification date of a specified URL.

Exercise 5-2. Write a simple server that reports the current time (in textual form) to any client that connects. Use Example 5-8, HttpMirror, as a framework for your server. This server should simply output the current time and close the connection, without reading anything from the client. You need to choose a port number that your service listens on. Use the Connect or GenericClient programs of Examples Example 5-4 and Example 5-5 to connect to this port and test your program.

Exercise 5-3. Write a program that connects to a POP3 mailbox and displays the Subject and From lines of the messages held there. Base your program on the PopClean program of Example 5-7, but be sure to never send the DELE command to delete any messages. A shortcoming of the PopClean program is that it requires you to type your password on the command line, where it can be observed by others in the room. Solve this problem by storing username, password, hostname, and port in an external configuration file that the program reads. See java.util.Properties.load( ) for an easy way to read and parse a configuration file. Alternatively, create a Swing GUI for your program, and use JPasswordField to get the user's password without displaying the characters on the screen.

Exercise 5-4. Write a simple web server that responds to GET requests for local files. You may want to use Example 5-8, HttpMirror, as a framework for your server. Alternatively, you can implement your server as a Service subclass for use with the Server program developed in Example 5-10.

The web server you write should be started with a directory specified on the command line, and it should serve files relative to this directory. When a client requests a file in or beneath the directory, the server should return the contents of the file, but should first output Content-Type, Content-Length, and Last-Modified header lines. For this exercise, assume that files with an extension of .html or .htm have a content type of text/html, and that all other files are text/plain. If a client requests a file that doesn't exist, your server should return an appropriate error code and message.

You may want to use the HttpMirror example to see what a typical HTTP request from a web browser looks like, as your server must be able to handle this kind of request. And you may want to use the HttpClient or GenericClient example to see how existing web servers respond to requests for existing and nonexistent files, since your server should be able to send responses of this sort. Strict conformance to all the details of the HTTP protocol is not a requirement for this exercise, but successful interaction with web browsers and the HttpClient example is.

Exercise 5-5. Modify the UDPSend and UDPReceive programs of Examples Example 5-11 and Example 5-12 so that UDPReceive sends an acknowledgment when it receives a datagram, and so that UDPSend doesn't exit until it receives the acknowledgment. The acknowledgment should itself be a datagram, and can contain any data you desire. (You could use the checksum classes of the java.util.zip package, for example, to compute a checksum of the received data and then send this back in the acknowledgment packet.) Use the setSoTimeout( ) method of DatagramSocket so that UDPSend doesn't wait for more than a few seconds to receive the acknowledgment. If the acknowledgment packet is not received before the timeout, UDPSend should assume that the original packet got lost and was not received. Your modified UDPSend should try to resend the packet once or twice, and if it still doesn't receive an acknowledgment, it should exit with an error message.

    [ Team LiB ] Previous Section Next Section