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?
Cara, desculpe a pergunta mas…
O seria um porto 30718? :shock:
“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()
[quote=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()
[/quote]
Obrigado. utilizei o getLocalPort(); mas agora não estou a conseguir passar o valor para fora do meu try catch.
[code]public void sendBroadcastReq(NetworkInterface netIf)
{
if(netIf != null)
{
InetAddress address = null;
InetAddress local_addr = null;
Enumeration 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();
}
}
}[/code]
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/
Onde o atributo “lPort” é declarado? Teria como você colocar o código da outra classe?