Advertisement
Guest User

Mais um backup

a guest
Oct 16th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.92 KB | None | 0 0
  1. import javax.xml.crypto.Data;
  2. import java.awt.*;
  3. import java.net.MulticastSocket;
  4. import java.net.DatagramPacket;
  5. import java.net.InetAddress;
  6. import java.io.IOException;
  7. import java.net.Socket;
  8. import java.sql.SQLOutput;
  9. import java.util.ArrayList;
  10. import java.util.Arrays;
  11. import java.util.Scanner;
  12. import java.util.StringTokenizer;
  13.  
  14. import static java.lang.Thread.sleep;
  15.  
  16.  
  17. class UDPMulticastProtocol {
  18.  
  19.     private String operation;
  20.  
  21.     public UDPMulticastProtocol() {
  22.  
  23.         this.operation = operation;
  24.     }
  25.  
  26.     void login (){
  27.  
  28.         System.out.println("O cliente deseja fazer login, por favor insira o username e a password");
  29.     }
  30.  
  31.  
  32.  
  33.     // De acordo com o tipo de operacao pretendida, vai ser invocado o respetivo método
  34.  
  35. }
  36.  
  37.  
  38. class AnswerRequests extends Thread {
  39.  
  40.     private String MULTICAST_ADDRESS = "224.3.2.1";
  41.     private int PORT = 4321;
  42.     private String message;
  43.     private String ip;
  44.     private int porto;
  45.  
  46.     public AnswerRequests(String message, String ip, int porto) {
  47.         this.message = message;
  48.         this.ip = ip;
  49.         this.porto = porto;
  50.     }
  51.  
  52.  
  53.     /*public void MessageParsing (String message){
  54.  
  55.         StringTokenizer str = new StringTokenizer(message, ";");
  56.  
  57.         System.out.println();
  58.  
  59.  
  60.     }*/
  61.  
  62.  
  63.  
  64.  
  65.  
  66.     public void run(){
  67.  
  68.         System.out.println("Mensagem do cliente (IP: " + ip + ";Porto: " + porto + ")" + ": " + message);
  69.         //Enviar resposta para o cliente
  70.         MulticastSocket socket = null;
  71.  
  72.  
  73.         //Separar por ";" e saber o número de pares
  74.         String [] pares  = message.split(";");
  75.         String  [] campos = new String[pares.length] ;
  76.  
  77.         if (pares.length >= 3){
  78.             for (int i = 0; i < pares.length; i++){
  79.                 String [] aux = pares[i].split("\\|");
  80.                 campos[i] = aux[1];
  81.             }
  82.         }
  83.  
  84.         for (int i = 0; i < pares.length; i++){
  85.             System.out.println (campos[i]);
  86.         }
  87.  
  88.  
  89.  
  90.  
  91.         //É melhor imprimir num ciclo que vai ate ao total de elementos do array, caso contrario opde criar exception
  92.         //System.out.println ("Tipo da mensagem: " + campos[0] + " campo2: " + campos[1] + " campo3: " + campos[2]);
  93.  
  94.  
  95.         //Trata do pedido para depois enviar a resposta para o cliente
  96.         if (message.equals("ola")){
  97.             UDPMulticastProtocol prot = new UDPMulticastProtocol();
  98.             prot.login();
  99.         }
  100.  
  101.  
  102.  
  103.         try{
  104.             socket = new MulticastSocket(); //Não é necessário dar bind porque está apenas a enviar
  105.             Scanner keyboardScaner = new Scanner(System.in);
  106.             while (true){
  107.                 String keyboard = keyboardScaner.nextLine();
  108.                 byte[] buffer = keyboard.getBytes();
  109.  
  110.                 InetAddress group = InetAddress.getByName(MULTICAST_ADDRESS);
  111.                 DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName(MULTICAST_ADDRESS), 4321);
  112.                 socket.send(packet);
  113.             }
  114.         } catch (IOException e) {
  115.             e.printStackTrace();
  116.         } finally {
  117.             socket.close();
  118.         }
  119.  
  120.  
  121.  
  122.  
  123.     }
  124.  
  125. }
  126.  
  127. public class MulticastServer extends Thread {
  128.  
  129.     private String MULTICAST_ADDRESS = "224.3.2.1";
  130.     private int PORT = 4321;
  131.     private int BUFFER_SIZE = 4096;
  132.  
  133.     public static void main(String[] args) {
  134.         MulticastServer server = new MulticastServer();
  135.         server.start(); //Ao invocar o start da thread, estamos a chamar o metodo run()
  136.     }
  137.  
  138.     public MulticastServer() {
  139.         super ("Server Multicast #" + (long) (Math.random() * 100));
  140.     }
  141.  
  142.     public void run(){
  143.         MulticastSocket socket = null;
  144.  
  145.         System.out.println(this.getName() + " running..."); //Vai buscar o que está dentro do método do construtor
  146.  
  147.         try {
  148.             socket = new MulticastSocket(PORT); //cria socket e dá bind
  149.             InetAddress group = InetAddress.getByName(MULTICAST_ADDRESS);
  150.             socket.joinGroup(group); //dá join ao grupo multicast
  151.  
  152.  
  153.             while (true) {
  154.                 //Recepcao
  155.                 byte[] inBuffer = new byte[BUFFER_SIZE];
  156.                 DatagramPacket msgIn = new DatagramPacket(inBuffer, inBuffer.length);
  157.                 socket.receive(msgIn); //Recebe o datagrama UDP
  158.  
  159.                 String clientIP = msgIn.getAddress().getHostAddress(); //Endereço IP do cliente que enviou a mensagem
  160.                 int clientport = msgIn.getPort(); //Porto do cliente
  161.  
  162.                 //System.out.println("Received packet from IP " + clientIP + "; Port number -> " + clientport + " with message:");
  163.                 String message = new String(msgIn.getData(), 0, msgIn.getLength());
  164.                 //System.out.println("Mensagem recebida: " + message);
  165.  
  166.                 //Vai buscar a informação da mensagem e lança a thread para tratar do pedido
  167.                 AnswerRequests work = new AnswerRequests(message, clientIP , clientport);
  168.                 work.start();
  169.  
  170.             }
  171.  
  172.         } catch (IOException e) {
  173.             e.printStackTrace();
  174.         } finally {
  175.             socket.close(); //Fechar a socket
  176.         }
  177.     }
  178.  
  179. }
  180.  
  181. //Outra forma de "descompactar" o pacote recebido
  182. //System.out.println("Mensagem recebida: " + new String(inBuffer, 0, inBuffer.length));
  183.  
  184.  
  185. //socket.joinGroup(group);
  186. //socket.setTimeToLive(1);
  187.  
  188. //Envio
  189. /*String msg = this.getName() + "is giving you an warm welcome!";
  190. byte[] buffer = msg.getBytes();
  191.  
  192. //InetAddress group = InetAddress.getByName(MULTICAST_ADDRESS); //Vou mandar um print, mas acho que isto vai buscar o endereço Multicast
  193. DatagramPacket packet = new DatagramPacket(buffer, buffer.length, group, PORT);
  194. socket.send(packet);
  195.  
  196. try { sleep((long) (Math.random() * PAUSE)); } catch (InterruptedException e ){} //Não irá ser necessário
  197. */
  198.  
  199. /*
  200. for (int i = 0; i < tst.size(); i++){
  201.             System.out.println(tst.get(i));
  202.         }
  203.  */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement