17 Client Server
17 Client Server
5-May-12
URL review
This is the package that defines sockets, URLs, etc. Constructs a URL object from a text string This exception is thrown if the given String cannot be parsed by newURL(String)
MalformedURLException
HTTP review
HTTP is a protocol--a formal description of a language that computers use to communicate An HTTP message consists of three parts:
The request or the response line
A request line typically contains either GET or PUT A response line contains the status code, such as 404 Not Found
A header section
Contains name-value pairs, such as Content-type: text/html Ends with a blank line
Using a URL
URLConnection c = url.openConnection();
The URLConnection is the basic way to access the resource information Returns the value of the named header field (as a String) Frequently used fields have shorthand methods, for example, c.getLastModified() = c.getHeaderField("last-modified") Returns the value of the int-th header field (as a String) The 0-th header field is the status line Returns an InputStream containing the content of the resource url.openStream() is shorthand for url.openConnection().getInputStream()
4
c.getHeaderField(name)
getHeaderField(int)
c.getInputStream()
Socket review
A socket is a low-level software device for connecting two programs (possibly on different computers) together new Socket(String host, int port)
Creates a client socket and makes the connection Methods include getInputStream(), getOutputStream(), and close()
Creates a server socket that listens on the specified port accept() returns a Socket that can be used for I/O
The port should be a number above 1024 accept() blocks while it waits for a connection InputStreamReader reader = new InputStreamReader(inStream); BufferedReader input = new BufferedReader(reader); char ch = input.read(), String s = input.readLine()
true is so that you auto-flush, that is, dont fill the buffer
Socket server = new Socket(ip_address, port) The ip_address can be the String "localhost"
This method makes the actual connection As on the previous slide As on the previous slide As on the previous slide
An HTTP server is just a server that follows the HTTP protocol (request/status line, header, blank line, body)
Since HTTP is a text-based protocol, compliance is easy HTTP 1.0 is simpler and should be used if the special features of 1.1 are not required The most important change in HTTP 1.1 is that it can accomodate proxy servers
The client and server must agree which version of HTTP is being used
Proxy servers
Proxies are important because they allow more than one server to use the same IP address
There arent enough IP addresses to go around If you have a lot of clients, you need a lot of servers--but the user should not have to try multiple IP addresses
server
has IP address
server
Without a proxy
client
client client
server
With a proxy
Multithreading
server.accept() is a blocking call--Java stops and waits for a response before it continues
This is only acceptable if the server never has more than one client A server needs to have a separate thread for each client Write a class that extends Thread
Override the public void run() method Create an instance of your class and call its (inherited) start() method Implement the public void run() method Create an instance of your class Create a Thread object with this instance as a parameter to the constructor Call the Thread objects start() method
10
Synchronization
While an object is being modified by one thread, no other thread should try to access it
The End
12