Bom dia! estou desenvolvendo um chat simples o problema é que funciona normal na rede local mas não funciona na internet, por exemplo o meu notebook esta roteado sendo assim o endereço dele é 192.168.0.xxx ,é onde está o ServerSocket na porta 5000 , se eu tentar rodar o cliente de outra rede sem ser local ele não conecta, pois o ip da internet é 200....,
como o cliente pode encontrar o servidor? :roll:
package projetos.msn;
import java.awt.EventQueue;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.border.EmptyBorder;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class ClienteGUI extends JFrame {
private JPanel contentPane;
private JTextField textField;
private Socket socket;
private Scanner scn;
private PrintWriter print;
private JTextArea textArea;
private String nome;
private Login lg;
private JTextArea txtrFff;
/**
* Launch the application.
*/
public static void main(String[] args) {
/*EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ClienteGUI frame = new ClienteGUI(nome);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});*/
}
public void configRede(){
try{
socket = new Socket(lg.ip,5000);
print = new PrintWriter(socket.getOutputStream());
scn = new Scanner(socket.getInputStream());
new Thread(new EscutaServer()).start();
}catch(Exception ex){
//ex.printStackTrace();
JanelaDeErro jE = new JanelaDeErro();
}
}
private class EscutaServer implements Runnable{
Scanner scanner;
public EscutaServer(){
try {
scanner = new Scanner(socket.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
try{
String line;
while((line = scanner.nextLine())!= null){
textArea.append(line+"\n");
textField.setText("");
setVisible(false);
setVisible(true);
}
scanner.close();
}catch(Exception exc){
System.out.println("erro escutaServer");
}
}
}
public ClienteGUI(String nome) {
super("RW Mensageiro : "+nome);
this.nome = nome;
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
setVisible(true);
JButton btnEnviar = new JButton("Enviar");
btnEnviar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try {
print.println(ClienteGUI.this.nome +" diz: "+textField.getText());
print.flush();
}catch(Exception ex){
System.out.println("erro enviar");
}
}
});
textField = new JTextField();
textField.setColumns(10);
JScrollPane scrollPane = new JScrollPane();
configRede();
JScrollPane scrollPane_1 = new JScrollPane();
GroupLayout gl_contentPane = new GroupLayout(contentPane);
gl_contentPane.setHorizontalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addContainerGap()
.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addComponent(textField, GroupLayout.PREFERRED_SIZE, 217, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(btnEnviar))
.addGroup(Alignment.TRAILING, gl_contentPane.createSequentialGroup()
.addComponent(scrollPane_1, GroupLayout.PREFERRED_SIZE, 190, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 94, GroupLayout.PREFERRED_SIZE)))
.addContainerGap())
);
gl_contentPane.setVerticalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addContainerGap()
.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 330, GroupLayout.PREFERRED_SIZE)
.addComponent(scrollPane_1, GroupLayout.PREFERRED_SIZE, 329, GroupLayout.PREFERRED_SIZE))
.addGap(10)
.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
.addComponent(btnEnviar)
.addComponent(textField, GroupLayout.PREFERRED_SIZE, 29, GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
textArea = new JTextArea();
textArea.setEditable(false);
scrollPane_1.setViewportView(textArea);
txtrFff = new JTextArea();
txtrFff.setEditable(false);
scrollPane.setViewportView(txtrFff);
contentPane.setLayout(gl_contentPane);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 332, 437);
setResizable(false);
}
}
package projetos.msn;
import javax.swing.*;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Servidor extends JFrame{
List<PrintWriter> escritores = new ArrayList<PrintWriter>();
public void sendAll(String texto){
for(PrintWriter escreve : escritores){
escreve.println(texto);
escreve.flush();
}
}
private Socket socket;
private ServerSocket server;
private Scanner scn;
private PrintWriter print;
public Servidor(){
super("Server");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(50,1);
setVisible(true);
try{
server = new ServerSocket(5000);
while(true){
socket = server.accept();
System.out.println("Conected");
print = new PrintWriter(socket.getOutputStream());
escritores.add(print);
new Thread(new EscutaCliente(socket)).start();
}
}catch(Exception exc){
System.out.println("erro no servidor serverSocket");
}
}
private class EscutaCliente implements Runnable{
Scanner scn2;
public EscutaCliente(Socket socket){
try{
scn2 = new Scanner(socket.getInputStream());
}catch(Exception exc2){
System.out.println("erro servidor scanner");
}
}
@Override
public void run() {
try{
String texto;
while((texto = scn2.nextLine())!= null){
System.out.println(texto);
sendAll(texto);
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
public static void main(String[] args) {
new Servidor();
}
}
