Your SlideShare is downloading. ×
0
ikh331-06-distributed-programming
ikh331-06-distributed-programming
ikh331-06-distributed-programming
ikh331-06-distributed-programming
ikh331-06-distributed-programming
ikh331-06-distributed-programming
ikh331-06-distributed-programming
ikh331-06-distributed-programming
ikh331-06-distributed-programming
ikh331-06-distributed-programming
ikh331-06-distributed-programming
ikh331-06-distributed-programming
ikh331-06-distributed-programming
ikh331-06-distributed-programming
ikh331-06-distributed-programming
ikh331-06-distributed-programming
ikh331-06-distributed-programming
ikh331-06-distributed-programming
ikh331-06-distributed-programming
ikh331-06-distributed-programming
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

ikh331-06-distributed-programming

493

Published on

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
493
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
14
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Distributed Programming, 10 November 2011
  • 2.  UDP  Low-level, connectionless  No reliability guarantee TCP  Connection-oriented  Not as efficient as UDPPemrograman Terdistribusi Sistem Terdistribusi (IKH331) 2
  • 3.  The sending/receiving point- Class DatagramSocket  void close() : close a datagram socket  int getLocalPort() : returns the port number on which socket is bound  InetAddress getLocalAddress() : returns the local address to which the socket is bound  void receive(DatagramPacket p) : blocks until a datagram is received and the packet’s buffer contains the data received  void send(DatagramPacket p) : sends a datagram packet from this socketPemrograman Terdistribusi Sistem Terdistribusi (IKH331) 3
  • 4. //Datagram Server public class DatagramServer { public static void main(String[] args) { DatagramPacket datapacket, returnpacket; int port = 2018; int len = 1024; try { DatagramSocket datasocket = new DatagramSocket(port); byte[] buf = new byte[len]; datapacket = new DatagramPacket(buf, buf.length); while (true) { try { datasocket.receive(datapacket); returnpacket = new DatagramPacket( datapacket.getData(), datapacket.getLength(), datapacket.getAddress(), datapacket.getPort()); datasocket.send(returnpacket); } catch (IOException e) { System.err.println(e); } } } catch (SocketException se) { System.err.println(se); } } }Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 4
  • 5. //Datagram Clientpublic class DatagramClient { public static void main(String[] args) { String hostname; int port = 2018; int len = 1024; DatagramPacket sPacket, rPacket; InetAddress ia = InetAddress.getByName(hostname); DatagramSocket datasocket = new DatagramSocket(); BufferedReader stdinp = new BufferedReader( new InputStreamReader(System.in)); while (true) { String echoline = stdinp.readLine(); if (echoline.equals("done")) break; byte[] buffer = new byte[echoline.length()]; buffer = echoline.getBytes(); sPacket = new DatagramPacket(buffer, buffer.length, ia, port); datasocket.send(sPacket); byte[] rbuffer = new byte[len]; rPacket = new DatagramPacket(rbuffer, rbuffer.length); datasocket.receive(rPacket); String retstring = new String(rPacket.getData()); System.out.println(retstring); } catch (IOException e) { System.err.println(e); } } // while} } // end main Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 5
  • 6.  A connection is set up between the sender and the receiver Class Socket  Socket(String host, int port) : creates a stream socket and connects it to the specified port number on the host  InputStream getInputStream() : returns an input stream for reading bytes from this socket  OutputStream getOutputStream() : returns an output stream for writing bytes to this socketPemrograman Terdistribusi Sistem Terdistribusi (IKH331) 6
  • 7.  Creates a server side socket on the specified port class ServerSocket  InetAddress getInetAddress() : returns the address to which this socket is connected  Socket accept() : blocking method which waits for a connection to be made and accepts itPemrograman Terdistribusi Sistem Terdistribusi (IKH331) 7
  • 8.  Maps a name to the host and port number  Create a server socket  Listen for incoming connections (accept())Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 8
  • 9. //NameServerpublic class NameServer { NameTable table; public NameServer() { table = new NameTable(); } void handleclient(Socket theClient) { BufferedReader din = new BufferedReader (new InputStreamReader(theClient.getInputStream())); PrintWriter pout = new PrintWriter(theClient.getOutputStream()); String getline = din.readLine(); StringTokenizer st = new StringTokenizer(getline); String tag = st.nextToken(); if (tag.equals("search")) { ... } else if (tag.equals("insert")) { ... } } public static void main(String[] args) { NameServer ns = new NameServer(); System.out.println("NameServer started:"); ServerSocket listener = new ServerSocket(Symbols.ServerPort); while (true) { Socket aClient = listener.accept(); ns.handleclient(aClient); aClient.close(); } }} Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 9
  • 10. //Client for name serverpublic class Name { BufferedReader din; PrintStream pout; public void getSocket() throws IOException { Socket server = new Socket(Symbols.nameServer, Symbols.ServerPort); din = new BufferedReader(new InputStreamReader(server.getInputStream())); pout = new PrintStream(server.getOutputStream()); } public int insertName(String name, String hname, int portnum){ getSocket(); pout.println("insert " + name + " " + hname + " " + portnum); pout.flush(); return Integer.parseInt(din.readLine()); } public PortAddr searchName(String name) throws IOException { getSocket(); pout.println("search " + name); pout.flush(); String result = din.readLine(); StringTokenizer st = new StringTokenizer(result); int portnum = Integer.parseInt(st.nextToken()); String hname = st.nextToken(); return new PortAddr(hname, portnum); } public static void main(String[] args) { Name myClient = new Name(); myClient.insertName("hello1", "birch.ece.utexas.edu", 1000); PortAddr pa = myClient.searchName("hello1"); System.out.println(pa.gethostname() + ":" + pa.getportnum()); }} Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 10
  • 11.  Methods can be called by another JVM on a different host Interface is remote if it extends Remote Remote object implements a remote interface and extends UnicastRemoteObject public interface NameService extends Remote { public int search(String s) throws RemoteException; public int insert(String s, String hostName, int portNumber) throws RemoteException; public int getPort(int index) throws RemoteException; public String getHostName(int index) throws RemoteException; }Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 11
  • 12. // A name service implementationpublic class NameServiceImpl extends UnicastRemoteObject implements NameService { . . . public NameServiceImpl() throws RemoteException { } public int search(String s) throws RemoteException { . . . } public int insert(String s, String hostName, int portNumber) throws RemoteException { . . . } public int getPort(int index) throws RemoteException { return ports[index]; } public String getHostName(int index) throws RemoteException { return hosts[index]; } public static void main(String args[]) { // create security manager System.setSecurityManager(new RMISecurityManager()); NameServiceImpl obj = new NameServiceImpl(); Naming.rebind("MyNameServer", obj); System.out.println("MyNameServer bound in registry"); }} Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 12
  • 13. import java.rmi.*;import java.rmi.server.UnicastRemoteObject;public class NameServiceImpl extends UnicastRemoteObject implements NameService { final int maxSize = 100; private String[] names = new String[maxSize]; private String[] hosts = new String[maxSize]; private int[] ports = new int[maxSize]; private int dirsize = 0; public NameServiceImpl() throws RemoteException { } public int search(String s) throws RemoteException { for (int i = 0; i < dirsize; i++) if (names[i].equals(s)) return i; return -1; }Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 13
  • 14. public int insert(String s, String hostName, int portNumber) throws RemoteException { int oldIndex = search(s); // is it already there if ((oldIndex == -1) && (dirsize < maxSize)) { names[dirsize] = s; hosts[dirsize] = hostName; ports[dirsize] = portNumber; dirsize++; return 1; } else return 0; } public int getPort(int index) throws RemoteException { return ports[index]; }Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 14
  • 15. public String getHostName(int index) throws RemoteException { return hosts[index]; } public static void main(String args[]) { // create security manager System.setSecurityManager(new RMISecurityManager()); try { NameServiceImpl obj = new NameServiceImpl(); Naming.rebind("MyNameServer", obj); System.out.println("MyNameServer bound in registry"); } catch (Exception e) { System.out.println("NameServiceImpl err: " + e.getMessage()); } }Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 15
  • 16.  Primitive types are passed by value Objects (that are not remote)  They are serialized and then passed by value.  At the other end the objects are deserialized  Any references inside the object are also serialized Remote Objects  Passed as remote references (stubs)Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 16
  • 17.  Obtain a reference for the remote object URL for the remote object is specified as  rmi://host:port/namePemrograman Terdistribusi Sistem Terdistribusi (IKH331) 17
  • 18. //A RMI client programimport java.rmi.*;public class NameRmiClient { public static void main(String args[]) { try { NameService r = (NameService) Naming.lookup("rmi://linux02/MyNameServer"); int i = r.insert("p1", "tick.ece", 2058); int j = r.search("p1"); if (j != -1) System.out.println(r.getHostName(j) + ":" + r.getPort(j)); } catch (Exception e) { System.out.println(e); } }}Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 18
  • 19.  Vijay Garg, "Concurrent and Distributed Programming in Java" Source code http://users.ece.utexas.edu/~garg/jbk.html http://tjerdastangkas.blogspot.com/search/la bel/ikh331Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 19
  • 20. Kamis, 10 November 2011

×