Olá pessoal, estou com um problema a resolver com sockets em JAVA, O meu Cliente manda a mensagem, o servidor recebe, até aí, tudo bem!!! Mas eu também preciso fazer com que o servidor mande uma mensagem automaticamente de retorno para o cliente.
_PS: Todas as minhas tentativas fizeram o servidor entrar em um loop infinito apenas recebendo a(s) mensagem(s)
package AtividadeUDP;
import java.io.;
import java.net.;
class UDPServidor {
public static void main(String args[]) throws Exception
{
try
{
DatagramSocket servidorSocket = new DatagramSocket(9880); //instancia do datagramSocket, servidor indicando a porta que ira atender
byte[] dadoRecebido = new byte[1024]; //tamanho das mensagens
byte[] dadoEnviado = new byte[1024];
System.out.println ("-------------------Servidor-------------------");
while(true)
{
/*--------------- Construindo recepção da mensagem --------------*/
dadoRecebido = new byte[1024]; //buffer de memória onde a mensagem será transferida
DatagramPacket recebimentoPacote = new DatagramPacket(dadoRecebido, dadoRecebido.length); //objeto DatagramPacket // comprimento do buffer
System.out.println ("--> Esperando por uma mensagem..."); //servidor aguardando por mensagem
/*-----------------------------------------------------------*/
/* ------------ Recebendo a mensagem ------------ */
servidorSocket.receive(recebimentoPacote); //servidor recebendo mensagem
String msgRecebida = new String(recebimentoPacote.getData()); //pegando dado recebido e atribuindo para string msgRecebida
InetAddress IPAddress = recebimentoPacote.getAddress(); //pegando endereço IP de quem enviou mensagem
int porta = recebimentoPacote.getPort(); //pegando porta de quem enviou a mensagem
/* -------------------------------------------*/
System.out.println ("Mensagem recebida do cliente cujo endereço é: " + IPAddress + " através da porta: " + porta);
System.out.println ("Mensagem: " + msgRecebida);
//Tentativa Falha de envio de resposta
//byte[] envioDado = new byte[1024];
//DatagramPacket envioPacote = new DatagramPacket(envioDado, envioDado.length, IPAddress,9880);
//servidorSocket.send(envioPacote);
}
}
catch (SocketException ex) {
System.out.println("UDP porta 9880 está ocupado.");
System.exit(1);
}
}
}
package AtividadeUDP;
import java.io.;
import java.net.;
class UDPCliente {
public static void main(String args[]) throws Exception
{
System.out.println ("-------------------Cliente-------------------");
try {
String servidorHostName = new String (“127.0.0.1”); //especificando ip do servidor através de uma string
if (args.length > 0)
servidorHostName = args[0];
/* ---------------- Construindo mensagem ----------------------------*/
DatagramSocket clienteSocket = new DatagramSocket(); //Instancia de ClienteSocket
BufferedReader user_buff = new BufferedReader(new InputStreamReader(System.in)); //buffer que contém mensagem
InetAddress IPAddress = InetAddress.getByName(servidorHostName); //endereço ip do servidor destino
System.out.println ("Preparando para comunicação com Servidor de IP " + IPAddress + ") via porta UDP 9880");
byte[] envioDado = new byte[1024]; //comprimento da mensagem
byte[] recebimentoDado = new byte[1024]; //comprimento da mensagem
System.out.print("Escreva uma mensagem: "); //cliente escreve mensagem que deseja enviar para o servidor
String msg = user_buff.readLine(); //mensagem é lida e atribuida para - msg -
envioDado = msg.getBytes();
/* ------------------------------------------- */
/* ----- Envio de Mensagem -------------------- */
System.out.println ("Enviando mensagem de " + envioDado.length + " bytes para o servidor");
DatagramPacket envioPacote = new DatagramPacket(envioDado, envioDado.length, IPAddress, 9880); //envio de mensagem para o servidor
clienteSocket.send(envioPacote);
/* ------------------------------------------- */
clienteSocket.close();
}
catch (UnknownHostException ex) {
System.err.println(ex);
}
catch (IOException ex) {
System.err.println(ex);
}
}
}