Baixe o app para aproveitar ainda mais
Prévia do material em texto
Universidade Salvador Discente: Abner Wilmer, Emerson Santana, Henry Rezende, Reuter Júnior. Disciplina: Sistemas Distribuídos Laboratório 1 – O comportamento padrão do código permite enviar uma mensagem e ao final da execução, receber a mensagem enviada como resposta. 2 – import java.net.*; import java.util.ArrayList; import javax.print.DocFlavor.STRING; import java.io.*; public class UDPClient { public static void main(String args[]) { if (args.length != 1) { System.err.println("Usage: java UDPClient <server hostname> "); System.exit(1); } BufferedReader reader = new BufferedReader(new InputStreamRea der(System.in)); String message; while (true) { System.out.println("Digite a mensagem (ou SAIR): "); try { message = reader.readLine(); } catch (IOException e) { System.out.println("IO: " + e.getMessage()); break; } if (message.toUpperCase().equals("SAIR")) { break; } ArrayList<String> params = new ArrayList<String>(); params.add(message); params.add(args[0]); SendMessage(params); } } public static void SendMessage(ArrayList<String> args) { Thread task = new Thread(SendMessageTask(args)); task.start(); long expectedFinal = System.currentTimeMillis() + 3000; while (task.isAlive()) { if (expectedFinal <= System.currentTimeMillis()) { task.interrupt(); System.out.println("Error: "); break; } } } public static Runnable SendMessageTask(ArrayList<String> args) { Runnable currentTask = new Runnable() { @Override public void run() { DatagramSocket aSocket = null; try { aSocket = new DatagramSocket(); byte[] m = args.get(0).getBytes(); InetAddress aHost = InetAddress.getByName(args.get(1)); int serverPort = 6789; DatagramPacket request = new DatagramPacket(m, args.get (0).length(), aHost, serverPort); aSocket.send(request); byte[] buffer = new byte[1000]; DatagramPacket reply = new DatagramPacket(buffer, buffe r.length); aSocket.receive(reply); System.out.println("Reply: " + new String(reply.getData ())); } catch (SocketException e) { System.out.println("Socket: " + e.getMessage()); } catch (IOException e) { System.out.println("IO: " + e.getMessage()); } finally { if (aSocket != null) aSocket.close(); } } }; return currentTask; } } 3 – A semelhança entre os dois métodos está no envio e recebimento da resposta, ambos tem essa função, no entanto o para a execução do TCP é necessário dois objetos para a comunicação, um para saída e outro a entrada de dados, também existe a diferença na forma de comunicação, no UDP é usado Pacotes de Datagramas enquanto no TCP é usado DataStream. import java.net.*; import java.io.*; import java.util.ArrayList; public class TCPClient { public static void main(String args[]) { // arguments supply message and hostname of destination if (args.length != 1) { System.err.println("Usage: java TCPClient <hostname>"); System.exit(1); } BufferedReader reader = new BufferedReader(new InputStreamRea der(System.in)); String message; while (true) { System.out.println("Digite a mensagem (ou SAIR): "); try { message = reader.readLine(); } catch (IOException e) { System.out.println("IO: " + e.getMessage()); break; } if (message.toUpperCase().equals("SAIR")) { break; } ArrayList<String> params = new ArrayList<String>(); params.add(message); params.add(args[0]); SendMessage(params); } } public static void SendMessage(ArrayList<String> args){ Socket s = null; try { int serverPort = 7896; s = new Socket(args.get(1), serverPort); DataInputStream in = new DataInputStream(s.getInputStream() ); DataOutputStream out = new DataOutputStream(s.getOutputStre am()); out.writeUTF(args.get(0)); // UTF is a string encoding see Sn 4.3 String data = in.readUTF(); System.out.println("Received: " + data); } catch (UnknownHostException e) { System.out.println("Sock:" + e.getMessage()); } catch (EOFException e) { System.out.println("EOF:" + e.getMessage()); } catch (IOException e) { System.out.println("IO:" + e.getMessage()); } finally { if (s != null) try { s.close(); } catch (IOException e) { System.out.println("close:" + e.getMessage()); } } } }
Compartilhar