fala galera to com o seguinte problema, tenho um chat feito utilizando socket no caso cliente e servidor, porém ele só funciona quando coloco como parâmetro o ip local, e gostaria de rodar o servidor na minha maquina e os cliente em outras maquinas em diferentes redes, já tentei passar como parâmetro o ipv4,tentei também o ip publico mais nada de funcionar, além disso já desativei o firewall também e até o momento não obtive exito, abaixo segue os códigos.
package ClienteSocket;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class ServidorSocket {
public static void main(String[] args) {
ServerSocket servidor = null;
try {
System.out.println("startando o servidor");
servidor = new ServerSocket(9999);
System.out.println("servidor startado");
while(true){
Socket cliente = servidor.accept();
new GerenciadorDeClientes(cliente);
}
} catch (IOException e) {
try {
if(servidor != null)
servidor.close();
} catch (IOException e1) {}
System.err.println("a porta está ocupada ou servidor foi fechado");
e.printStackTrace();
}
}
}
package ClienteSocket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class ClienteSocket {
public static void main(String[] args) {
try {
final Socket cliente = new Socket(“127.0.0.1”, 9999);
// lendo mensagens do servidor
new Thread(){
@Override
public void run() {
try {
BufferedReader leitor = new BufferedReader(new InputStreamReader(cliente.getInputStream()));
while(true){
String mensagem = leitor.readLine();
if(mensagem == null || mensagem.isEmpty())
continue;
System.out.println("o servidor disse: " + mensagem );
}
} catch (IOException e) {
System.out.println("impossivel ler a mensagem do servidor");
e.printStackTrace();
}
}
}.start();
// escrenvendo para o servidor
PrintWriter escritor = new PrintWriter(cliente.getOutputStream(), true);
BufferedReader leitorTerminal = new BufferedReader(new InputStreamReader(System.in));
String mensagemTerminal = "";
while( true ){
mensagemTerminal = leitorTerminal.readLine();
if(mensagemTerminal == null || mensagemTerminal.length() == 0){
continue;
}
escritor.println(mensagemTerminal);
if(mensagemTerminal.equalsIgnoreCase("::SAIR")){
System.exit(0);
}
}
} catch (UnknownHostException e) {
System.out.println("o endereço passado é inválido");
e.printStackTrace();
} catch (IOException e) {
System.out.println("o servidor pode estar fora ar");
e.printStackTrace();
}
}
}
A PROXIMA CLASSE É JUSTAMENTE ONDE SE ENCONTRA-SE O METODO MAIN,POIS AMESMA EXECUTA UMA INTERFACE GRAFICA
/**
*
*/
//private static final long serialVersionUID = -5261903818373181455L;
private JTextArea taEditor = new JTextArea("digite aqui sua mensagem");
private JTextArea taVisor = new JTextArea();
private JList liUsarios = new JList();
private PrintWriter escritor;
private BufferedReader leitor;
private JScrollPane scrollTaVisor = new JScrollPane(taVisor);
public ClienteSocketSwing() {
setTitle("Chat APS");
setLocationRelativeTo(null);
setLayout(new BorderLayout());
liUsarios.setBackground(Color.GRAY);
taEditor.setBackground(Color.WHITE);
taEditor.setPreferredSize(new Dimension(400, 40));
// taVisor.setPreferredSize(new Dimension(350, 100));
taVisor.setEditable(false);
liUsarios.setPreferredSize(new Dimension(100, 140));
add(taEditor, BorderLayout.SOUTH);
add(scrollTaVisor , BorderLayout.CENTER);
add(new JScrollPane(liUsarios), BorderLayout.WEST);
pack();
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
String[] usuarios = new String[]{"servidor"};
preencherListaUsuarios(usuarios);
}
/**
* Preenche a lista de usuarios
* @param usuarios
*/
private void preencherListaUsuarios(String[] usuarios) {
DefaultListModel modelo = new DefaultListModel();
liUsarios.setModel(modelo);
for(String usuario: usuarios){
modelo.addElement(usuario);
}
// liUsarios.getModel().
}
private void iniciarEscritor() {
taEditor.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyPressed(KeyEvent e) {
// taEditor.getText()
if(e.getKeyCode() == KeyEvent.VK_ENTER){
// escrenvendo para o servidor
if(taVisor.getText().isEmpty()){
return;
}
Object usuario = liUsarios.getSelectedValue();
if(usuario != null){
// jogando no visor
taVisor.append("Eu: ");
taVisor.append(taEditor.getText());
taVisor.append("\n");
escritor.println(Comandos.MENSAGEM + usuario);
escritor.println(taEditor.getText());
// limpando o editor
taEditor.setText("");
e.consume();
}else{
if(taVisor.getText().equalsIgnoreCase(Comandos.SAIR)){
System.exit(0);
}
JOptionPane.showMessageDialog(ClienteSocketSwing.this, "Selecione um usuario");
return ;
}
}
}
@Override
public void keyReleased(KeyEvent e) {}
});
}
public void iniciarChat() {
try {
final Socket cliente = new Socket("127.0.0.1", 9999);
escritor = new PrintWriter(cliente.getOutputStream(), true);
leitor = new BufferedReader(new InputStreamReader(cliente.getInputStream()));
} catch (UnknownHostException e) {
System.out.println("o endereço passado é inválido");
e.printStackTrace();
} catch (IOException e) {
System.out.println("o servidor pode estar fora ar");
e.printStackTrace();
}
}
public static void main(String[] args) {
ClienteSocketSwing cliente = new ClienteSocketSwing();
cliente.iniciarChat();
cliente.iniciarEscritor();
cliente.inicarLeitor();
}
private void atualizarListaUsuarios() {
escritor.println(Comandos.LISTA_USUARIOS);
}
private void inicarLeitor() {
// lendo mensagens do servidor
try {
while(true){
String mensagem = leitor.readLine();
if(mensagem == null || mensagem.isEmpty())
continue;
// recebe o texto
if(mensagem.equals(Comandos.LISTA_USUARIOS)){
String[] usuarios = leitor.readLine().split(",");
preencherListaUsuarios(usuarios);
}else if(mensagem.equals(Comandos.LOGIN)){
String login = JOptionPane.showInputDialog("Qual o seu login?");
escritor.println(login);
}else if(mensagem.equals(Comandos.LOGIN_NEGADO)){
JOptionPane.showMessageDialog(ClienteSocketSwing.this, "o login é inválido");
}else if(mensagem.equals(Comandos.LOGIN_ACEITO)){
atualizarListaUsuarios();
}else{
taVisor.append(mensagem);
taVisor.append("\n");
taVisor.setCaretPosition(taVisor.getDocument().getLength());
}
}
} catch (IOException e) {
System.out.println("impossivel ler a mensagem do servidor");
e.printStackTrace();
}
}
private DefaultListModel getListaUsuarios() {
return (DefaultListModel) liUsarios.getModel();
}
}