Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

ricardoneves93

Java Sockets

Mensagens Recomendadas

ricardoneves93

Boa noite. Acabei de fazer duas aplicações de chat por texto muito simples. Uma faz de servidor e outra faz de Cliente. Para isto estou a usar sockets usando o ipv4 da máquina que está a fazer de servidor, em rede local funciona perfeitamente, mas quando vou tentar ligar com o cliente ao servidor em redes diferentes não o consigo fazer, simplesmente o cliente não encontra o servidor. Aqui fica o código do Cliente:

public class Client extends JFrame {
private JTextField userText;
private JTextArea chatWindow;
private ObjectOutputStream output;
private ObjectInputStream input;
private String message = "";
private String serverIP;
private Socket connection;

public Client(String host){
 super("Client messenger");
 serverIP = host;
 userText = new JTextField();
 userText.setEditable(false);
 userText.addActionListener(
new ActionListener() {

 @Override
 public void actionPerformed(ActionEvent e) {
  sendMessage(e.getActionCommand());
  userText.setText("");
 }
});
 add(userText, BorderLayout.NORTH);
 chatWindow = new JTextArea();
 add(new JScrollPane(chatWindow), BorderLayout.CENTER);
 setSize(300, 150);
 setVisible(true);
}

//connect to server
public void startRunning(){
 try{
  connectToServer();
  setupStreams();
  whileChatting();
 }catch(EOFException eofException){
  showMessage("\n Client terminated the connection");
 }catch(IOException ioException){
  ioException.printStackTrace();
 }finally{
  closeStuff();
 }
}

//IMPORTANTE CRIAÇÃO DO SOCKET
private void connectToServer() throws IOException{
 showMessage("Attempting connection... \n");
 connection = new Socket(serverIP, 6789);
 showMessage("Connected to: " + connection.getInetAddress().getHostName());
}

private void setupStreams() throws IOException{
 output = new ObjectOutputStream(connection.getOutputStream());
 output.flush();
 input = new ObjectInputStream(connection.getInputStream());
 showMessage("\n Streams are now good to go! \n");
}

private void whileChatting() throws IOException{
 ableToType(true);
 do{
  try{
message = (String) input.readObject();
showMessage("\n " + message);
  }catch(ClassNotFoundException classNotFoundException){
showMessage("I don't know that object type");
  }

 }while(!message.equals("SERVER - END"));
}

private void closeStuff(){
 showMessage("\n Closing stuff...");
 ableToType(false);
 try{
  output.close();
  input.close();
  connection.close();
 }catch(IOException ioException){
  ioException.printStackTrace();
 }

}

private void sendMessage(String message){
 try{
  output.writeObject("CLIENT - " + message);
  output.flush();
  showMessage("\nCLIENT - " + message);
 }catch(IOException ioException){
  chatwindow.append("\n something messed up sending message!");
 }
}


private void showMessage(final String text){
 SwingUtilities.invokeLater(
new Runnable() {

 @Override
 public void run() {
  chatwindow.append(text);
 }
}
  );
}
private void ableToType(final Boolean x){
 SwingUtilities.invokeLater(
new Runnable() {

 @Override
 public void run() {
  userText.setEditable(x);
 }
}
  );
}

}

ps: Retirei quando instâncio a classe Client, pois acho irrelevante.

Cumpriementos, Ricardo Neves

Editado por ricardoneves93

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
eatg75

Tens configurado rotas dessa nova rede (onde o outro cliente esta) para rede onde o servidor esta?

Consegues aceder segunda rede a partir da primeira utilizando utilitarios como ping e whatnot?


Victarion seized the dusky woman by the wrist and pulled her to him.

Victarion - She will do it. Go pray to your red god. Light your fire, and tell me what you see.

Moqorro's dark eyes seemed to shine.

Moqorro - I see dragons.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ricardoneves93

ja viste se o problema não será bloqueio de portas ?

Quanto a isso, para prevenir abri uma nova porta no meu router. Acho que fiz de maneira correcta, como sou novato em redes vi este tutorial no youtube:

https://www.youtube.com/embed/Mrz2BjXIA4A?feature=oembed

, o que é certo é que já estou a usar essa porta e não funciona na mesma. Também já tentei usar portas que já estão abertas, porta do uTorrent etc e não funcionou.

Tens configurado rotas dessa nova rede (onde o outro cliente esta) para rede onde o servidor esta?

Consegues aceder segunda rede a partir da primeira utilizando utilitarios como ping e whatnot?

Peço desculpa pela ignorância mas não sei do que estás a falar! Como disse estou a começar redes agora, com tutoriais vistos na internet.

Editado por ricardoneves93

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

se o ping não funciona, a resposta está obtida : tens problemas de encaminhamento.

para resolver uma situação destas é impossível fazer/dizer algo sem saber, pelo menos, a estutura da red criada pela tua aplicação.

- onde está o servidor ? no teu computador ? num servidor não sei aonde ?

- onde está(ão) o(s) cliente(s) ? no teu computradod ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.