Problema na resposta do Servidor para o Cliente

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();
    }
   
}