Buscar

Lab SD 1

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()); 
 } 
 } 
 } 
}

Continue navegando