1 / 26

COMP201 Java Programming Part III: Advanced Features

COMP201 Java Programming Part III: Advanced Features. Topic 14: Networking Volume II,Chapter 3. Outline. Networking basics IP addresses, ports, protocols, client-server interaction Socket-level programming Writing a client Writing a server URL connections and web servers

Télécharger la présentation

COMP201 Java Programming Part III: Advanced Features

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. COMP201 Java Programming Part III: Advanced Features Topic 14: Networking Volume II,Chapter 3

  2. Outline • Networking basics • IP addresses, ports, protocols, client-server interaction • Socket-level programming • Writing a client • Writing a server • URL connections and web servers • Retrieving information • Sending information

  3. Networking Basics • Internet protocol (IP) address • Every host on Internet has a unique IP address 143.89.40.46, 203.184.197.198 203.184.197.196, 203.184.197.197, 127.0.0.1 • More convenient to refer to using hostname string cs.ust.hk, tom.com, localhost • Domain Naming Service (DNS) maps names to numbers • One hostname can correspond to multiple internet addresses: tom.com: 203.184.197.196, 203.184.197.196, 203.184.197.197 (down to one now)

  4. Networking Basics • java.net.InetAddress class converts between hostnames and internet addresses InetAddress tm = InetAddress.getByName(“tom.com"); InetAddress tm= InetAddress.getByName(“localhost"); //127.0.0.1 InetAddress tm = InetAddress.getLocalHost(); • Can get array of addresses (if more than one) InetAddress[] addrs; addrs=InetAddress.getAllByName(“tom.com"); for (int i = 0; i < addr.length; i++) System.out.println(addrs[i].getHostAddress()); InetAddressTest.java

  5. Networking Basics • Ports • A port identifies a service within a host Many different services can be running on the host • Many standard port numbers are pre-assigned time of day 13, ftp 21, telnet 23, smtp 25, finger 79, http 80 see /etc/services on workstation for list of all assigned ports • IP address + port number = "phone number“ for service

  6. Networking Basics • protocols : rules that facilitate communications between machines Time of day just reports time, ftp has put/get commands, etc. • Protocols must be standardized and documented So machines can reliably work with one another • TCP (Transmission Control Protocol) vs UDP (User Datagram Protocol, good for, e.g., video delivery)

  7. Networking Basics • Client-Server interaction • Communication between hosts is two-way, but usually the two hosts take different roles • Server waits for client to make request Server registered on a known port with the host ("public phone number") Usually running in endless loop Listens for incoming client connections

  8. Networking Basics • Client "calls" server to start a conversation Client making calls uses hostname/IP address and port number Sends request and waits for response • Standard services always running ftp, http, smtp, etc. server running on host using expected port • Server offers shared resource (information,database, files, printer, compute power) to clients

  9. Networking Basics • Using telnetto try out some services of servers: • Telnet assumes you want to connect to port 23 on the receiving host (port 23 is where the telnet server is listening) • However there is an optional argument after the hostname that allows you to connect to a different port • Try the following Get time: telnet time-A.timefreq.bldrdoc.gov 13 Finger some one: telnet cssu100.cs.ust.hk 79 & type a username Get HTML page: telnet tom.com 80 and enter a GET command

  10. Socket-Level Programming A socketis a bi-directional communication channel between hosts Send and receive data using streams OutputStream InputStream Client Server InputStream OutputStream • Next: • How to write a client • How to write a server

  11. Socket-Level Programming/Client • To write a client • Create a new Socket with hostname and port number of the connection Socket s = New Socket(StringhostName,intportNumber); • Call s.getOutputStream() and s.getInputStream() to get streams for sending and receiving infomation • Need to learn protocol used to communicate • Know how to properly form requests to send to server • Know how to interpret the server’s responses

  12. Socket-Level Programming/Client • Example: A client using http to request page Socket s = new Socket(“tom.com", 80); PrintWriter send = new PrintWriter(s.getOutputStream()); send.print("GET\n"); send.flush(); BufferedReader recv = new BufferedReader( new InputStreamReader(s.getInputStream())); String line; while ((line = recv.readLine()) != null) System.out.println(line); s.close()//HttpTest.java. This is basically what web browsers do.

  13. Socket-Level Programming/Client Use setSoTimeoutmethod to limit the amount of time waiting for data Socket s = new Socket(“tom.com", 80); s.setSoTimeout( 10000 ); // time out after 10 seconds Can still wait indefinitely for initial connection (construction of socket object).

  14. Socket-Level Programming/Client Solution: Construct socket in a separate thread and use the join method to time out. class SocketOpener implements Runnable { public SocketOpener(String aHost, int aPort) { socket = null; host = aHost; port = aPort; } publicvoid run() { try { socket = new Socket(host, port);} catch (IOException exception) {} } public Socket getSocket() { return socket; } … private String host; private int port; private Socket socket;

  15. Socket-Level Programming/Client class SocketOpener implements Runnable { // method to be called by main thread public static Socket openSocket(String aHost, int aPort, int timeout) { SocketOpener opener = new SocketOpener(aHost, aPort); Thread t = new Thread(opener); t.start(); try { t.join(timeout); // wait at most timeout milliseconds } // for the thread to dead catch (InterruptedException exception){} return opener.getSocket(); } SocketOpenerTest.java

  16. Socket-Level Programming/Server • To write a server • Create a new ServerSocket with a port number to listen on the port ServerSocket s = New ServerSocket( portNumber); • Useaccept() to listen on the port. • accept() returns a socket incoming when a client calls Socket incoming = s.accept(); • Call incoming.getOutputStream() and incoming.getInputStream() to get streams for sending and receiving information

  17. Socket-Level Programming/Server Example: Echo server ServerSocket s = new ServerSocket(8189); while (true) { Socket incoming = s.accept( ); BufferedReader in = new BufferedReader (new InputStreamReader(incoming.getInputStream())); PrintWriter out = new PrintWriter (incoming.getOutputStream(), true/* autoFlush */ ); out.println( "Hello! Enter BYE to exit." ); … } EchoServer.java

  18. Socket-Level Programming/Server Multithread server: starts a separate thread for each connection. public class ThreadedEchoServer { public static void main(String[] args ) { int i = 1; try{ServerSocket s = newServerSocket(8190); while (true) { Socket incoming = s.accept( ); System.out.println("Spawning " + i); new ThreadedEchoHandler(incoming, i).start(); i++; } } catch (Exception e) …. //ThreadedEchoServer.java

  19. Socket-Level Programming/Server class ThreadedEchoHandler extends Thread { publicThreadedEchoHandler(Socket i, int c) { incoming = i; counter = c; } public void run() { try { BufferedReader in = new BufferedReader (new InputStreamReader(incoming.getInputStream())); PrintWriter out = new PrintWriter (incoming.getOutputStream(),true /* autoFlush */); out.println( "Hello! Enter BYE to exit." ); … private Socket incoming; private int counter; }

  20. Socket-Level Programming/Server • ICQServer.java • A simple server that listens on port 7777. • Connect two clients so that they can talk to each other. • Can handle more than one pairs. • See code for details.

  21. URL Connections • URL stands for Uniform Resource Locator Neat scheme for uniquely identifying all kinds of network resources • Basic form <protocol>:<sitename><pathname> http://www.cs.ust.hk/~liao/comp201/index.html ftp://ftp.cs.ust.hk/pub/lzhang/teach/201/codes/HttpTest/HttpTest.java file:/MyDisk/Letters/ToMom2-11-98 Protocols include files, http, ftp, gopher, news, mailto, etc. • Connecting to a URL, the hard way Manually parse out the host, protocol, path from URL Create a socket to host Use protocol to send the right request & interpret response But Java makes this much easier than that...

  22. URL Connections/Retrieve Info • Open connection with java.net.URLURL url1 = new URL(“http://www.cs.ust.hk/~liao/comp201/index.html”); URL url2 = new URL (“ftp://ftp.cs.ust.hk/pub/lzhang/teach/201/codes/net/HttpTest/HttpTest.java”); • To fetch contents of resource, use openStream method of URL, which returns a InputStream InputStream in1 = url1.openStream(); InputStream in2 = url2.openStream(); Now we can nest the InputStreams with other Java streams to retrieve contents • Advantages • No need to worry about protocol details & port. • Connection to particular file, not easy to do at Socket level

  23. URL Connections/Retrieve Info • Use java.net.URLConnectionfor additional info about resource • Create URLConnectionobject from URL, URLConnection cnn = url.openConnection(); • Set properties of connections: E.g. setDoOutPut(true) for sending information to the server • Make connection: cnn.connect(); • Query header information: getContentType, getContentLength, getContentEncoding, getDate, getExpiration, getLastModified • getInputStream for reading and getOutputStream for writing URLConnectionTest.java

  24. URL Connections/Sending Info • Web servers receive information from clients using either GET or POST • http://maps.yahoo.com/py/maps.py: <form action="/py/maps.py?Pyt=Tmap&YY=28457" method=GET> … </form> • http://www.census.gov/ipc/www/idbprint.html: <form method=postaction="/cgi-bin/ipc/idbsprd"> • Appropriate CGI (common gateway interface) script is called to process info received and produce an HTML page to send back to client • CGI scripts usually written in C, Perl, shell script. (Out of the scope of this course.) • Will discuss servlets, Java alternative to CGI scripts

  25. URL Connections/Sending Info • Send information to server using GET • Attach parameters to the end of URL http://host/script?parameters • Separate parameters using “&” and encode parameters as follows to avoid misinterpretation (URL encoding) • Static String encode (String s) • Replace space with “+” • Replace each non-alphanumeric character with “%” followed by the hexadecimal code of the character “Mastering C++”  “Mastering+C%2b%2b” • Disadvantage: long parameter string, might exceed limits of browsers. GetTest.java

  26. URL Connections/Sending Info • Sending information to server using POST: Open URLConnection and send parameter using a stream • Open a URLConnection: URL url = new URL(“http:/host/script”); URLConnection cnn = url.openConnection(); • Set up connection for output: cnn.setDoOutput(true); • Get a stream for sending data: PrinterWriter out = new PrintWriter(cnn.getOutputStream()); • Send parameters Out.print(name1 + “=“ + URLEncoder.encode(value1) + “&” ); Out.print(name2 + “=“ + URLEncoder.encode(value2) + “\n”); PostTest.java

More Related