Download presentation
Presentation is loading. Please wait.
1
COMP201 Java Programming Part III: Advanced Features Topic 13: Networking Volume II,Chapter 3
2
COMP201 Topic 14 / Slide 2 Objective and Outline l Objective: n Introduction to Java networking features –It is much easier to write networking programs inJava than in C++ –But less efficient. l Outline n Motivating example: ICQ Server and Client n Networking basics –IP addresses, ports, protocols, client-server interaction n Socket-level programming –Writing a client (Socket) –Writing a server (ServerSocket) –Example: writing your own icq n Communicating with web servers –Retrieving information (URL, URLConnection) –Sending information
3
COMP201 Topic 14 / Slide 3 Networking Basics l Internet protocol (IP) addresses n 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 n More convenient to refer to using hostname string cs.ust.hk, tom.com, localhost n One hostname can correspond to multiple internet addresses: –www.yahoo.com:www.yahoo.com 66.218.70.49; 66.218.70.50; 66.218.71.80; 66.218.71.84; … n Domain Naming Service (DNS) maps names to numbers
4
COMP201 Topic 14 / Slide 4 java.net.InetAddress class converts between hostnames and internet addresses InetAddress tm = InetAddress.getByName(“www.yahoo.com"); InetAddress tm= InetAddress.getByName(“localhost"); //127.0.0.1 InetAddress tm = InetAddress.getLocalHost(); l Can get array of addresses (if more than one) InetAddress[] addrs; addrs=InetAddress.getAllByName(“www.yahoo.com"); for (int i = 0; i < addr.length; i++) System.out.println(addrs[i].getHostAddress()); InetAddressTest.java Networking Basics
5
COMP201 Topic 14 / Slide 5 l Ports l Many different services can be running on the host l A port identifies a service within a host l Many standard port numbers are pre-assigned time of day 13, ftp 21, telnet 23, smtp 25, http 80 see /etc/services on workstation for list of all assigned ports l IP address + port number = "phone number“ for service Networking Basics
6
COMP201 Topic 14 / Slide 6 l protocols : rules that facilitate communications between machines l Examples: l HTTP: HyperText Transfer Protocol l FTP: File Transfer Protocol l SMTP: Simple Message Transfer Protocol l TCP: Transmission Control Protocol l UDP: User Datagram Protocol, good for, e.g., video delivery) l Protocols are standardized and documented So machines can reliably work with one another Networking Basics
7
COMP201 Topic 14 / Slide 7 l Client-Server interaction l Communication between hosts is two-way, but usually the two hosts take different roles l 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 Networking Basics
8
COMP201 Topic 14 / Slide 8 l Client "calls" server to start a conversation Client making calls uses hostname/IP address and port number Sends request and waits for response l Standard services always running ftp, http, smtp, etc. server running on host using expected port l Server offers shared resource (information,database, files, printer, compute power) to clients Networking Basics
9
COMP201 Topic 14 / Slide 9 Using telnet to try out some services of servers: l Telnet assumes you want to connect to port 23 on the receiving host (port 23 is where the telnet server is listening) l However there is an optional argument after the hostname that allows you to connect to a different port l Try the following Get time: telnet time-A.timefreq.bldrdoc.gov 13 Get HTML page: telnet www.cs.ust.hk 80 and enter a GET command Many servers now refuse telnet connections due to security reasons. Networking Basics
10
COMP201 Topic 14 / Slide 10 Outline l Outline n Networking basics –IP addresses, ports, protocols, client-server interaction n Socket-level programming –Writing a client –Writing a server –Example: writing your own icq n Communicating with web servers –Retrieving information –Sending information
11
COMP201 Topic 14 / Slide 11 Socket-Level Programming l Socket is an abstraction of one type of bi-directional communication channel between hosts l Send and receive data using streams l Next: n How to write a client n How to write a server ClientServer OutputStream InputStream OutputStream
12
COMP201 Topic 14 / Slide 12 l To write a client socket using java.net.Socket Create a new Socket with hostname and port number of the connection Socket s = New Socket(String hostName,int portNumber); Call s.getOutputStream() and s.getInputStream() to get streams for sending and receiving infomation n 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 Writing Clients
13
COMP201 Topic 14 / Slide 13 Writing Clients l SocketTest: Makes a socket connection to the atomic clock in Boulder, Colorado, and prints the time that the server sends. try { Socket s = new Socket("time-A.timefreq.bldrdoc.gov", 13); BufferedReader in = new BufferedReader (new InputStreamReader( s.getInputStream() )); // read from in } catch (IOException e) { e.printStackTrace(); }
14
COMP201 Topic 14 / Slide 14 Writing Servers l To write a server using java.net.ServerSocket Create a new ServerSocket with a port number to listen on the port ServerSocket s = New ServerSocket( portNumber); Use accept() 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
15
COMP201 Topic 14 / Slide 15 Writing Servers l Example: Echo server ServerSocket s = new ServerSocket(8189); 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
16
COMP201 Topic 14 / Slide 16 A side note l Many machines in CSD now refuse socket connections due to security considerations. l However, you can n Run severs on any lab 4 machine and connect to the server from any other lab 4 machines. n Run severs on one of scpu1-14 and connect to the server from others or from the PC network.
17
COMP201 Topic 14 / Slide 17 l Multithread server: starts a separate thread for each connection. public class ThreadedEchoServer { public static void main(String[] args ) { int i = 1; try{ServerSocket s = new ServerSocket(8190); while (true) { Socket incoming = s.accept( ); System.out.println("Spawning " + i); new ThreadedEchoHandler(incoming, i).start(); i++; } } catch (Exception e) …. // ThreadedEchoServer.java Writing Servers
18
COMP201 Topic 14 / Slide 18 class ThreadedEchoHandler extends Thread { public ThreadedEchoHandler(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; } Writing Servers
19
COMP201 Topic 14 / Slide 19 l A more interesting example n 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. n ICQClient.java –Allows user to connect to ICQServer and have one-to-one conversation with partner Servers & Client
20
COMP201 Topic 14 / Slide 20 Outline l Outline n Networking basics –IP addresses, ports, protocols, client-server interaction n Socket-level programming –Writing a client –Writing a server –Example: writing your own icq n Communicating with web servers –Retrieving information –Sending information
21
COMP201 Topic 14 / Slide 21 l Reason for communicating with web servers n To retrieve/send information l Need to indicate location of resource n URL stands for Uniform Resource Locator –Neat scheme for uniquely identifying all kinds of network resources n Basic form : –http://www.cs.ust.hk/~lzhang/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. Communicating with web servers
22
COMP201 Topic 14 / Slide 22 Class java.net.URL represents a Uniform Resource Locator n Create an java object that represents an URL URL url = new URL(“http://www.cs.ust.hk/~lzhang/comp201/index.html”);http://www.cs.ust.hk/~lzhang/comp201/index.html –getHost(), getPath(), getPort(), getProtocol() l java.net.URLConnection represents a communication link between the application and a URL. n Constructor: –URLConnection cnn = new URLConnection( url) n Obtainable also from URL: –URLConnection cnn = url.openConnection(); Communicating with web servers
23
COMP201 Topic 14 / Slide 23 Steps for working with java.net.URLConnection n Set properties of connection: –setDoInPut(true) //default –setDoOutPut(true) for sending information to the server –…–… Make connection: cnn.connect(); n Query header information: –getContentType, getContentLength, getContentEncoding, getDate, getExpiration, getLastModified getInputStream for reading and getOutputStream for writing l API of the class has a more detailed description. Communicating with web servers
24
COMP201 Topic 14 / Slide 24 l Can directly open a stream for reading in URL class: n public final InputStream openStream() throws IOExceptionInputStreamIOException url.opentStream() –Opens a connection to this URL and returns an InputStream for reading from that connection. –This method is a shorthand for: openConnection().getInputStream() Communicating with web servers URLTest.java
25
COMP201 Topic 14 / Slide 25 Retrieving Information l URLConnectionTest.java URL url = new URL(urlName); URLConnection connection = url.openConnection(); connection.connect(); // print header fields int n = 1; String key; while ((key = connection.getHeaderFieldKey(n)) != null) { String value = connection.getHeaderField(n); System.out.println(key + ": " + value); n++; }
26
COMP201 Topic 14 / Slide 26 // print convenience functions System.out.println("----------"); System.out.println("getContentType: " + connection.getContentType() ); System.out.println("getContentLength: " + connection.getContentLength() ); System.out.println("getContentEncoding: " + connection.getContentEncoding() ); …. Retrieving Information
27
COMP201 Topic 14 / Slide 27 // print first ten lines of contents BufferedReader in = new BufferedReader(new InputStreamReader( connection.getInputStream() )); String line; n = 1; while ((line = in.readLine()) != null && n <= 10) { System.out.println(line); n++; } if (line != null) System.out.println("..."); Retrieving Information
28
COMP201 Topic 14 / Slide 28 Sending Information l Web servers receive information from clients using either GET or POST l GET requests are requests made by browsers when the user l types in a URL on the address line, l follows a link from a Web page, or l makes an HTML form that does not specify a METHOD or specifically use the GET method. l POST requests are generated when someone creates an HTML form that specifies METHOD="POST" l Examples: l http://maps.yahoo.com/py/maps.py: python, http://maps.yahoo.com/py/maps.py … l http://www.census.gov/ipc/www/idbprint.html: http://www.census.gov/ipc/www/idbprint.html
29
COMP201 Topic 14 / Slide 29 Sending Information l Appropriate CGI (common gateway interface) script is called to process info received and produce an HTML page to send back to client l CGI scripts usually written in C, Perl, shell script. (Out of the scope of this course.) l Will discuss servlets, Java alternative to CGI scripts
30
COMP201 Topic 14 / Slide 30 l Our task: Write java program to communicate with CGI scripts n The way we send parameters to a CGI script depends on –The parameters that CGI scripts expects l What to send –The way a CGI script receives parameters l How to send Sending Information
31
COMP201 Topic 14 / Slide 31 l Send information to CGI script using GET l Attach parameters to the end of URL http://host/script?parameters l Separate parameters using “&” and encode parameters as follows to avoid misinterpretation (URL encoding) l Replace space with “+” l 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 Sending Information
32
COMP201 Topic 14 / Slide 32 l Sending information to CGI script using POST: Open URLConnection and send parameter using a stream l Open a URLConnection: URL url = new URL(“http:/host/script”); URLConnection cnn = url.openConnection(); l Set up connection for output: cnn.setDoOutput(true); Sending Information
33
COMP201 Topic 14 / Slide 33 l Get a stream for sending data: PrinterWriter out = new PrintWriter(cnn.getOutputStream()); l Send parameters Out.print(name1 + “=“ + URLEncoder.encode(value1, “UTF-8”) + “&” ); Out.print(name2 + “=“ + URLEncoder.encode(value2, “UTF-8”) ) + “\n”); Note: URLEncoder: Utility class for HTML form encoding. This class contains static methods for converting a String to the application/x-www- form-urlencoded MIME ( Multipurpose Internet Mail Extensions ) format. The World Wide Web Consortium Recommendation states that the UTF-8 encoding scheme should be used.World Wide Web Consortium Recommendation PostTest.java Sending Information
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.