Pessoal, estou com um problema na hora da resposta do Servidor para o Cliente, já testei a solicitação do cliente para o servidor e funciona. Outra coisa que notei é que o número do ip quando o servidor tenta responder para o cliente, volta com uma barra “/” na frente, exemplo:
cliente tem o ip: 127.0.0.1, ai quando o servidor vai responder ele manda o pacote para o ip: /127.0.0.1.
E mais, a porta que ele está respondendo(servidor) não é a que eu passo na interface, ele tá pegando uma porta sei lá onde, fiz o teste passando uma porta a 5000, sabe qual porta ele tava tentando responder? 1980!!! Que loco!!!
Como faço para meu servidor responder para o cliente? Pode ser um JOptionPanezinho, só pra eu saber que tá funcionando… :roll:
To usando MVC.
package modelo;
import controle.Controlador;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import javax.swing.JOptionPane;
public class Servidor extends Thread{
private DatagramSocket servidor;
private DatagramPacket pacote;
private int porta;
private byte []dado;
private String recebido;
private String mensagem;
private Controlador controlador;
public Servidor(int porta) {
controlador = new Controlador();
this.porta = porta;
try {
servidor = new DatagramSocket(porta);
} catch (SocketException ex) {
ex.printStackTrace();
}
}
public void envia(String mensagem, String ip, int porta) {
dado = mensagem.getBytes();
try {
pacote = new DatagramPacket(dado, dado.length, InetAddress.getByName(ip), porta);
servidor.send(pacote);
} catch (UnknownHostException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}
public void run() {
while(true) {
try {
dado = new byte[100];
pacote = new DatagramPacket(dado, dado.length);
// aguarda recebimento de pacote e não passa daqui enquanto o pacote não chega.
servidor.receive( pacote );
recebido = new String(pacote.getData(), 0, pacote.getLength());
JOptionPane.showMessageDialog(null,"Enviado do Cliente: \n" + recebido);
mensagem = "blz";
String ip = String.valueOf(pacote.getAddress());
int porta = pacote.getPort();
envia(mensagem,ip,porta);
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
package modelo;
import controle.Controlador;
import java.io.IOException;
import java.io.Serializable;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.rmi.UnknownHostException;
import javax.swing.JOptionPane;
public class Cliente extends Thread{
private DatagramSocket cliente;
private DatagramPacket pacote;
private byte[] dado;
private Controlador controlador;
public Cliente() {
controlador = new Controlador();
try {
cliente = new DatagramSocket();
} catch (SocketException ex) {
ex.printStackTrace();
}
}
public void envia(String mensagem, String ip, int porta){
dado = mensagem.getBytes();
try {
pacote = new DatagramPacket(dado, dado.length, InetAddress.getByName(ip), porta);
cliente.send(pacote);
} catch (UnknownHostException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}
public String recebe() {
String resposta = null;
dado = new byte[100];
pacote = new DatagramPacket(dado, dado.length);
try {
cliente.setSoTimeout(5000);
cliente.receive( pacote );
resposta = new String(pacote.getData(), 0, pacote.getLength());
JOptionPane.showMessageDialog(null,"Recebi do Servidor: \n" + resposta);
} catch (IOException ex) {
ex.printStackTrace();
}
return resposta;
}
public void run() {
}
}
package controle;
import javax.swing.JOptionPane;
import visao.Tela;
import modelo.Cliente;
import modelo.Servidor;
/**
*
* @author Moacir
*/
public class Controlador {
static Tela tela;
static Cliente cliente;
static Servidor servidor;
boolean terminal;
static String email;
static String assunto;
static String ip1 = null;
static int ip2;
static int porta;
/** Creates a new instance of Controlador */
public Controlador() {
}
public static void main(String args[]){
tela = new Tela();
tela.setVisible(true);
while(true){
if(tela.getConectaCli() == true){//if 1
tela.setConectaCli(false);
cliente = new Cliente();
new Thread(cliente).run();
}// fim do if 1.
if(tela.getConectaSer() == true){ // responsável por saber se o servidor conectou ou não.
tela.setConectaSer(false); // se já tiver conectado, não conecta novamente.
servidor = new Servidor(5000);// passando a porta...
new Thread(servidor).run(); // outra maneira de startar uma thread.
}
if(tela.getEnviou() == true){
tela.setEnviou(false);
String a = getEmail();
String b = getIp1();
int c = getPorta();
cliente.envia(a,b,c);
String d = cliente.recebe();
JOptionPane.showMessageDialog(null,"valor da resposta: " + d);
}
}
}//fim do main.
private static String getEmail(){
return email = tela.getEmail();
}
private static String getIp1(){
return ip1 = tela.getIp1();
}
private static int getPorta(){
return porta = tela.getPorta();
}
}