Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import javax.xml.crypto.Data;
- import java.awt.*;
- import java.net.MulticastSocket;
- import java.net.DatagramPacket;
- import java.net.InetAddress;
- import java.io.IOException;
- import java.net.Socket;
- import java.sql.SQLOutput;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Scanner;
- import java.util.StringTokenizer;
- import static java.lang.Thread.sleep;
- class UDPMulticastProtocol {
- private String operation;
- public UDPMulticastProtocol() {
- this.operation = operation;
- }
- void login (){
- System.out.println("O cliente deseja fazer login, por favor insira o username e a password");
- }
- // De acordo com o tipo de operacao pretendida, vai ser invocado o respetivo método
- }
- class AnswerRequests extends Thread {
- private String MULTICAST_ADDRESS = "224.3.2.1";
- private int PORT = 4321;
- private String message;
- private String ip;
- private int porto;
- public AnswerRequests(String message, String ip, int porto) {
- this.message = message;
- this.ip = ip;
- this.porto = porto;
- }
- /*public void MessageParsing (String message){
- StringTokenizer str = new StringTokenizer(message, ";");
- System.out.println();
- }*/
- public void run(){
- System.out.println("Mensagem do cliente (IP: " + ip + ";Porto: " + porto + ")" + ": " + message);
- //Enviar resposta para o cliente
- MulticastSocket socket = null;
- //Separar por ";" e saber o número de pares
- String [] pares = message.split(";");
- String [] campos = new String[pares.length] ;
- if (pares.length >= 3){
- for (int i = 0; i < pares.length; i++){
- String [] aux = pares[i].split("\\|");
- campos[i] = aux[1];
- }
- }
- for (int i = 0; i < pares.length; i++){
- System.out.println (campos[i]);
- }
- //É melhor imprimir num ciclo que vai ate ao total de elementos do array, caso contrario opde criar exception
- //System.out.println ("Tipo da mensagem: " + campos[0] + " campo2: " + campos[1] + " campo3: " + campos[2]);
- //Trata do pedido para depois enviar a resposta para o cliente
- if (message.equals("ola")){
- UDPMulticastProtocol prot = new UDPMulticastProtocol();
- prot.login();
- }
- try{
- socket = new MulticastSocket(); //Não é necessário dar bind porque está apenas a enviar
- Scanner keyboardScaner = new Scanner(System.in);
- while (true){
- String keyboard = keyboardScaner.nextLine();
- byte[] buffer = keyboard.getBytes();
- InetAddress group = InetAddress.getByName(MULTICAST_ADDRESS);
- DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName(MULTICAST_ADDRESS), 4321);
- socket.send(packet);
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- socket.close();
- }
- }
- }
- public class MulticastServer extends Thread {
- private String MULTICAST_ADDRESS = "224.3.2.1";
- private int PORT = 4321;
- private int BUFFER_SIZE = 4096;
- public static void main(String[] args) {
- MulticastServer server = new MulticastServer();
- server.start(); //Ao invocar o start da thread, estamos a chamar o metodo run()
- }
- public MulticastServer() {
- super ("Server Multicast #" + (long) (Math.random() * 100));
- }
- public void run(){
- MulticastSocket socket = null;
- System.out.println(this.getName() + " running..."); //Vai buscar o que está dentro do método do construtor
- try {
- socket = new MulticastSocket(PORT); //cria socket e dá bind
- InetAddress group = InetAddress.getByName(MULTICAST_ADDRESS);
- socket.joinGroup(group); //dá join ao grupo multicast
- while (true) {
- //Recepcao
- byte[] inBuffer = new byte[BUFFER_SIZE];
- DatagramPacket msgIn = new DatagramPacket(inBuffer, inBuffer.length);
- socket.receive(msgIn); //Recebe o datagrama UDP
- String clientIP = msgIn.getAddress().getHostAddress(); //Endereço IP do cliente que enviou a mensagem
- int clientport = msgIn.getPort(); //Porto do cliente
- //System.out.println("Received packet from IP " + clientIP + "; Port number -> " + clientport + " with message:");
- String message = new String(msgIn.getData(), 0, msgIn.getLength());
- //System.out.println("Mensagem recebida: " + message);
- //Vai buscar a informação da mensagem e lança a thread para tratar do pedido
- AnswerRequests work = new AnswerRequests(message, clientIP , clientport);
- work.start();
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- socket.close(); //Fechar a socket
- }
- }
- }
- //Outra forma de "descompactar" o pacote recebido
- //System.out.println("Mensagem recebida: " + new String(inBuffer, 0, inBuffer.length));
- //socket.joinGroup(group);
- //socket.setTimeToLive(1);
- //Envio
- /*String msg = this.getName() + "is giving you an warm welcome!";
- byte[] buffer = msg.getBytes();
- //InetAddress group = InetAddress.getByName(MULTICAST_ADDRESS); //Vou mandar um print, mas acho que isto vai buscar o endereço Multicast
- DatagramPacket packet = new DatagramPacket(buffer, buffer.length, group, PORT);
- socket.send(packet);
- try { sleep((long) (Math.random() * PAUSE)); } catch (InterruptedException e ){} //Não irá ser necessário
- */
- /*
- for (int i = 0; i < tst.size(); i++){
- System.out.println(tst.get(i));
- }
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement