Network Programming CS 3331 Fall 2007 CS 3331 1 Outline Socket programming Remote method invocation RMI CS 3331 2 Socket Programming Sockets Ends points of two way communications i e logical connections between hosts Can be used to send and receive data Supported by most languages and platforms Server vs client sockets sockets end points logical connection CS 3331 3 Socket Programming Cont Server sockets Wait for requests to come in over the network Implemented by java net ServerSocket class Client sockets Used to send and receive data Can be thought of as a pair of input and output streams Implemented by java net Socket class CS 3331 4 Server vs Client Sockets Server socket waiting for connection requests Client socket transmission of data server socket connection request client socket CS 3331 5 Server Sockets Creating and using server sockets Constructors ServerSocket int port ServerSocket int port int backlog Methods Description accept Waits for a connection request and returns a Socket Stops waiting for requests from clients close CS 3331 6 Server Sockets Cont Usage pattern try ServerSocket server new ServerSocket 8888 while true Socket incoming server accept obtain a client socket handle client request by reading from and writing to the socket catch IOException e handle exception on creating a server socket CS 3331 7 Client Sockets Creating client sockets On the client side Socket String host int port On the server side accept of ServerSocket Using client sockets Methods Description getInputStream Returns an InputStream for receiving data getOutputStream Returns an OutputStream to send data close Closes the socket connection CS 3331 8 Client Sockets Cont Usage pattern try Socket s new Socket iguana cs utep edu 8888 PrintWriter out new PrinterWriter new OutputStreamWriter s getOutputStream BufferedReader in new BufferedReader new InputStreamReader s getInputStream send and receive data by using out and in in close out close s close catch IOException e handle exception CS 3331 9 Example A Simple Echo Server import java io import java net public class EchoServer public static void main String args try ServerSocket server new ServerSocket 8008 while true Socket s server accept BufferedReader in new BufferedReader new InputStreamReader s getInputStream PrintWriter out new PrintWriter new OutputStreamWriter s getOutputStream handle client by using in and out s close catch Exception e e printStackTrace CS 3331 10 Echo Server Cont handle client by using in and out out print Hello This is the Java EchoSever out println Enter BYE to exit out flush String str null while str in readLine null System out println Received str out println Echo str out flush if str trim equals BYE break CS 3331 11 Testing Echo Server Testing with telnet client aspect telnet localhost 8008 Trying 127 0 0 1 Connected to localhost Escape character is Hello This is the Java EchoServer Enter BYE to exit Hello Echo Hello Where are you Echo Where are you BYE Echo BYE Connection to host lost CS 3331 12 A Simple Echo Client import java io import java net public class EchoClient public static void main String args String host args length 0 host args 0 localhost try Socket socket new Socket host 8008 BufferedReader in new BufferedReader new InputStreamReader socket getInputStream PrintWriter out new PrintWriter new OutputStreamWriter socket getOutputStream send and receive data by using in and out socket close catch Exception e e printStackTrace CS 3331 13 Echo Client Cont send and receive data by using in and out send data to server for int i 1 i 10 i System out println Sending line i out println line i out flush out println BYE out flush receive data from server String str null while str in readLine null System out println str CS 3331 14 Testing Echo Client send and receive data by using in and out sspect java EchoClient Sending line 1 Sending line 2 Sending line 10 Hello This is Java EchoServer Enter BYE to exit Echo line 1 Echo line 2 Echo line 10 Echo BYE CS 3331 15 Echo Server Revisited How to support multiple clients simultaneously import java io import java net public class MultiEchoServer public static void main String args try ServerSocket server new ServerSocket 8008 while true Socket s server accept new ClientHandler s start catch Exception e e printStackTrace class ClientHandler CS 3331 16 Multi Echo Server Cont class ClientHandler private static class ClientHandler extends Thread private Socket sock public ClientHandler Socket sock this sock sock public void run BufferedReader in new BufferedReader new InputStreamReader sock getInputStream PrintWriter out new PrintWriter new OutputStreamWriter sock getOutputStream out println Hello This is the Java EchoSever nEnter BYE to exit out flush String str null while str in readLine null out println Echo str out flush if str trim equals BYE break CS 3331 17 Exercise Time Server Send the current local time to clients Use Calendar getInstance getTime to get the current time public class TimeServer CS 3331 18 Exercise Time Client Take two arguments host name and port number and connect to the host to find its current time e g java TimeClient iguana 8888 public class TimeClient CS 3331 19 Outline Socket programming Remote method invocation RMI CS 3331 20 Remote Method Invocation Why RMI In socket programming programmers have to make explicit connections between clients and servers and manage data transmission Thus it s hard and error prone to write socket programs Can the connection and data transmission be managed by JVM CS 3331 21 What s RMI Distributed programming model to allow objects residing on different hosts remote objects to be manipulated as if they were all on the same host local objects RMI architecture call Client Server return 1 6 Stub 3 2 JVM 4 Skeleton JVM 5 CS 3331 22 Local vs Remote Objects Local objects Remote objects Objects accessible only within the local hosts Objects accessible from remote hosts Instances of classes that implements a marker interface java rmi Remote Property of remote objects Similar to local objects arguments downcasting instanceof etc Clients of remote objects interact with stubs Passing arguments and results for RMI calls CS 3331 Call by value for local objects through serialization and deserialization Call by reference for remote objects 23 Locating Remote Objects RMI registry Directory service mapping RMI servers or objects to their names Server register itself to make it available to remote clients Client locate a
View Full Document