* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download my_s25
Server Message Block wikipedia , lookup
TCP congestion control wikipedia , lookup
Recursive InterNetwork Architecture (RINA) wikipedia , lookup
Dynamic Host Configuration Protocol wikipedia , lookup
Internet protocol suite wikipedia , lookup
Zero-configuration networking wikipedia , lookup
Cracking of wireless networks wikipedia , lookup
Hypertext Transfer Protocol wikipedia , lookup
Remote Desktop Services wikipedia , lookup
Network Programming in Java Chapter 22 Network Programming • One of the original purpose for creating Java • Network Programming – two or more computers communicate and share resources to solve a problem • Example: Client-Server architecture Client-Server Architecture • Server – an application that runs on the host computer that provides a means of connection and useful information once a connection is established. • Client – application(s) running on different computer(s) that seek to establish a connection and request computation/ information from the server • Actually, computation can be performed on both ends of the network connection Networking Basics • Computers running on the Internet communicate with each other using either the Transmission Control Protocol (TCP) or the User Datagram Protocol (UDP), as this diagram illustrates: • Java programs communicate over the network at the application layer, so you typically don't need to concern yourself with the TCP and UDP layers. • Instead, you can use the classes in the java.net package to provide system-independent network communication. • However, to decide which Java classes your programs should use, you do need to understand how TCP and UDP differ. TCP vs. UDP • TCP (Transmission Control Protocol) is a connection-based protocol that provides a reliable flow of data between two computers. – This is analogous to making a telephone call. – TCP guarantees that data sent from one end of the connection actually gets to the other end and in the same order it was sent. Otherwise, an error is reported. – applications that require reliable communications. The Hypertext Transfer Protocol (HTTP), File Transfer Protocol (FTP), and Telnet • UDP (User Datagram Protocol) is a protocol that sends independent packets of data, called datagrams, from one computer to another with no guarantees about their order of delivery or arrival at all. UDP is not connection-based like TCP. – This is analogous to the sending a series of letters through the postal service. – Used for applications that cannot afford or don’t need the slow down of reliable communication. – Note: Many firewalls and routers are configured to not allow UDP packets. IP Address and Ports • Data transmitted over the Internet is accompanied by addressing information that identifies the computer and the port for which it is destined. • Computers usually have a single physical connection to the Internet whose domain name address (fienup2.cs.uni.edu) gets mapped to an IP address (134.161.243.240) • Ports are identified by a 16-bit number, which TCP and UDP use to deliver the data to the right application. Port Numbers • port numbers 0 - 1023 are reserved for wellknown services such as HTTP and FTP and other system services • IP number and port # are used to create a socket Networking Classes in the JDK • Through the classes in java.net, Java programs can use TCP or UDP to communicate over the Internet. – URL, URLConnection, Socket, and ServerSocket classes all use TCP – DatagramPacket, DatagramSocket, and MulticastSocket classes all use UDP Socket: Java Network Connection • Analogous to an electrical socket, the client can plug into the server • This creates a connection along which information can flow • When the client disconnects, the socket is free for the next client to use • Input and output streams can be created to allow communication over the socket. Date Server Example import java.util.Date; import java.net.*; import java.io.*; public class DateServer { static final public int portNumber = 4291; public static void main(String [] args) { try { DateServer world = new DateServer(); } catch (IOException e) { System.out.println("IO exception " + e); } // end try-catch } // end main public DateServer ( ) throws IOException { ServerSocket server = new ServerSocket(portNumber); for (int i = 0; i < 3; i++) { System.out.println("Waiting for a client"); Socket sock = server.accept(); System.out.println("Got client #" + i); OutputStreamWriter out = new OutputStreamWriter(sock.getOutputStream()); String message = "Current date and time is " + new Date() + "\n"; out.write(message); out.close(); } // end for } // end DateServer } // end class DateServer Date Server Example ServerSocket server = new ServerSocket(portNumber); Socket sock = server.accept(); – A server socket waits for requests to come in over the network. – accept() - listens for a connection to be made to this socket and accepts it. OutputStreamWriter out = new OutputStreamWriter(sock.getOutputStream()); out.write(message); out.close(); – Output stream created to allow communication over the socket Date Client Example import java.net.*; import java.io.*; public class DateClient { static final public int portNumber = 4291; public static void main(String [] args) { try { DateClient world = new DateClient(); } catch (IOException e) { System.out.println("Received an IO exception " + e); } // end try-catch } // end main public DateClient ( ) throws IOException { Socket sock = new Socket(InetAddress.getLocalHost(), portNumber); Reader isread = new InputStreamReader(sock.getInputStream()); BufferedReader input = new BufferedReader(isread); System.out.println("message is " + input.readLine()); } // end DateClient } // end class DateClient Date Client/Server Limitations • Only one-way communication from the server to the client was utilized • Only one client can be handled by the server at any time Therapist Client/Server Example Eliza-like (Weizenbaum ’76) simulation of a Gestalt psychotherapist conducting a question-and-answer session with a user • Multiple clients are possible by creating a new server thread to handle each client Therapist Server Example import java.net.*; import java.io.*; class Therapist { static public void main (String [ ] args) { try { Therapist world = new Therapist(); } catch (IOException e) { System.out.println("Received an IO Exception" + e); } // end try-catch } // end main static final public int portNumber = 5321; public Therapist () throws IOException { ServerSocket server = new ServerSocket(portNumber); while (true) { Socket sock = server.accept(); Thread session = new TherapySession (sock.getInputStream(), sock.getOutputStream()); session.start(); } // end while } // end Therapist constructor } // end class Therapist • Spawns a new server thread to handle each new client Therapist Server Example import java.io.*; import java.util.Vector; import java.util.StringTokenizer; class TherapySession extends Thread { public TherapySession (InputStream ins, OutputStream outs) { Reader isread = new InputStreamReader(ins); in = new BufferedReader(isread); out = new OutputStreamWriter(outs); } // end TherapySession constructor private String name = ""; private BufferedReader in; private Writer out; private String response(String text) { // answer a question with a question if (text.endsWith("?")) return "Why do you want to know?"; // break up line Vector words = new Vector(); StringTokenizer breaker = new StringTokenizer(text, " .,?!"); while (breaker.hasMoreElements()) words.addElement(breaker.nextElement()); // look for ``I feel'' if ((words.size() > 1) && words.elementAt(0).equals("i") && words.elementAt(1).equals("feel")) return "Why do you feel that way?"; // look for relatives for (int i = 0; i < words.size(); i++) { String relative = (String) words.elementAt(i); if (isRelative(relative)) return "Tell me more about your " + relative; } // end for // nothing else, generic response return "Tell me more"; } // end response Therapist Server Example private boolean isRelative(String name) { return name.equals("mother") || name.equals("father") || name.equals("brother") || name.equals("sister") || name.equals("uncle"); } // end isRelative public void run() { try { // get name out.write("Hello. Welcome to therapy. What is your name?\n"); out.flush(); name = in.readLine(); out.write("Well " + name + " what can we do for you today?\n"); out.flush(); // now read and respond while (true) { String text = in.readLine(); out.write(response(text) + "\n"); out.flush(); } // end while } catch (IOException e) { stop(); } } // end run } // end class TherapySession Therapist Client Example import java.io.*; import java.net.*; class TherapyClient { public static void main (String [ ] args) { try { TherapyClient world = new TherapyClient(); } catch (IOException e) { System.out.println("got IO exception " + e); } // end try-catch } // end main static final public int portNumber = 5321; private BufferedReader input, term; private Writer output; public TherapyClient () throws IOException { // open standard input as buffered reader term = new BufferedReader(new InputStreamReader(System.in)); // open socket as a reader and a writer Socket sock = new Socket(InetAddress.getLocalHost(), portNumber); Reader isread = new InputStreamReader(sock.getInputStream()); input = new BufferedReader(isread); output = new OutputStreamWriter(sock.getOutputStream()); // now read and print while (true) { // read and print something from therapist String line = input.readLine(); System.out.println(line); // get our response line = term.readLine(); if (line.equals("Quit")) break; output.write(line + "\n"); output.flush(); } // end while } // end TherapyClient constructor } // end class TherapyClient Transmitting Objects over the Network • Objects to be transmitted over the network via object serialization • The object to be transmitted implements the Serializable interface • Classes that do not implement this interface will not have any of their state serialized or deserialized. • All subtypes of a serializable class are themselves serializable. • The serialization interface has no methods or fields and serves only to identify the semantics of being serializable. • To allow subtypes of non-serializable classes to be serialized, the subtype may assume responsibility for saving and restoring the state of the supertype's public, protected, and (if accessible) package fields. The subtype may assume this responsibility only if the class it extends has an accessible noarg constructor to initialize the class's state. It is an error to declare a class Serializable if this is not the case. The error will be detected at runtime.