Obter port utilizado

5 respostas
dianasmagalhaes

Olá,

tou a trabalhar numa aplicação que envia um datagram socket para rede, a fim de ser detectado por dispositivos da empresa. O port de destino é fixo, uma vez que os dispositivos trabalham todos sempre com o mesmo porto 30718, no entanto respondem para este mesmo porto e não para o que enviou o pedido.

Uma vez que foi criado um datagram socket para recepção das respostas e é criado para o porto 30718. Queria colocar um porto dinâmico, ou seja que a aplicação detecte qual foi o port que enviou o pedido para receber a resposta.

Como posso obter o porto?

Alguém sabe?

5 Respostas

Hebert_Coelho

Cara, desculpe a pergunta mas…

O seria um porto 30718? :shock:

E

“Porto” em português de Portugal é “porta” no português brasileiro e ambas as palavras são a tradução para “port”.

De qualquer maneira, para obter a porta (ou porto) do datagrama de origem, usa-se o método “getPort” se for um datagrama que foi recebido de uma determinada porta.

http://download-llnw.oracle.com/javase/6/docs/api/java/net/DatagramPacket.html#getPort()

Hebert_Coelho

GUJ tb é cultura! Valeu

dianasmagalhaes
entanglement:
d usa-se o método "getPort" se for um datagrama que foi recebido de uma determinada porta.

http://download-llnw.oracle.com/javase/6/docs/api/java/net/DatagramPacket.html#getPort%28%29

Obrigado. utilizei o getLocalPort(); mas agora não estou a conseguir passar o valor para fora do meu try catch.

public void sendBroadcastReq(NetworkInterface netIf)
    {
       if(netIf != null)
       {
       InetAddress address = null;
       InetAddress local_addr = null;
       Enumeration<InetAddress> ips = netIf.getInetAddresses();
       while (ips.hasMoreElements())
       {
        
        try {

            local_addr = ips.nextElement();
            if(! local_addr.isLoopbackAddress() &&
                (local_addr.getAddress().length == 4))
            { 
           
            Discover.s_out("Create UDP socket "+local_addr+
                ":"+port+";",null,2);
            dsocket = new DatagramSocket(port+1,local_addr);
            
           lPort = dsocket.getLocalPort();
           System.out.println(lPort);
            
            dsocket.setBroadcast(true);
            dsocket.setReuseAddress(true);
            address = InetAddress.getByName("255.255.255.255");
            //Create datagrampacket with a message, ip address and the especific port.
            DatagramPacket packet = new DatagramPacket(message,message.length,address,port);
            //System.out.println("Address:" +address);
            dsocket.send(packet);
            }
        }catch(Exception e)
        {
           Discover.s_out("Can't get broadcast address",e);
                   e.printStackTrace(System.out);
           return;
        }
        
        
        if(dsocket != null)
            dsocket.close();
       }
       }
    }

na linha 23 consigo imprimir o valor obtido para o output, mas não estou a obtê-lo na outra classe que preciso dele... alguma ideia de como resolver isso? x/

Hebert_Coelho

Onde o atributo “lPort” é declarado? Teria como você colocar o código da outra classe?

Criado 21 de setembro de 2010
Ultima resposta 22 de set. de 2010
Respostas 5
Participantes 3