Jump to content
ricardoneves93

Java Sockets

Recommended Posts

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

Edited by ricardoneves93

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Edited by ricardoneves93

Share this post


Link to post
Share on other sites
HappyHippyHippo

Ninguém sabe o que poderá ser?

faz ping ao servidor e diz se tens resposta


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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.